2017-10-27 19 views
1

テーブル全体を選択できる必要がありますが、重複するIDがある場合は、異なるフィールドのデータに基づいて1つだけを選択します。例えばMySQLはwhere句に基づいて同じフィールドを持つ複数の行を1つ選択します

私の表は、この

enter image description here

のように見える場合、私はすべての行を選択したいのですが、同じIDの2がある場合は、アドレスの種類としてBillingでのみ行を選択します。

+0

での結果は、それが 'Billing'だけ重複しているIDのがあるだろうと仮定しても大丈夫ですか? –

+0

ちょうどアイデア。 where句には2つの条件を含める必要があります最初に、特定のIDを持つ行が1つしかないことを確認します。それは、countを持つ副問い合わせを実行することによって行うことができます。 2番目の条件は、アドレスタイプが課金かどうかをチェックします。 OR演算を使用する必要があります。 –

答えて

2

あなたはこのようにそれを行うことができます。

select * from Table1 
where (AddressType='Billing') or 
(AddressType='Shipping' and ID not in (select ID from Table1 where AddressType='Billing')) 
order by ID 

説明:

第一条件はBillingアドレスタイプをフィルタリングすることです。

第2条件は、同じIDのBillingを持たないアドレスタイプShippingをフィルタリングすることです。

SQL Fiddle

+0

これは、Billing and Shippingが唯一のアドレスタイプであり、同じIDを持つ2つ以上の行がないことを前提としています。 – jussius

+0

@jussius:データサンプルに基づいて、これは機能します。また、これらのレコード間の関係を特定するために使用されるフィールドは、「ID」だけです。 –

+0

これは、請求タイプの行のみを返します。請求書付きの重複行がない場合は、送料を返却する必要があります。 –

0

はこれを試してみてください -

SELECT *, ADDRESS 
FROM (SELECT MIN(ID), ADDRESSTYPE 
     FROM YOUR_TABLE 
     GROUP BY ADDRESS) X 
関連する問題