テーブル全体を選択できる必要がありますが、重複するIDがある場合は、異なるフィールドのデータに基づいて1つだけを選択します。例えばMySQLはwhere句に基づいて同じフィールドを持つ複数の行を1つ選択します
私の表は、この
のように見える場合、私はすべての行を選択したいのですが、同じIDの2がある場合は、アドレスの種類としてBilling
でのみ行を選択します。
テーブル全体を選択できる必要がありますが、重複するIDがある場合は、異なるフィールドのデータに基づいて1つだけを選択します。例えばMySQLはwhere句に基づいて同じフィールドを持つ複数の行を1つ選択します
私の表は、この
のように見える場合、私はすべての行を選択したいのですが、同じIDの2がある場合は、アドレスの種類としてBilling
でのみ行を選択します。
あなたはこのようにそれを行うことができます。
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
をフィルタリングすることです。
これは、Billing and Shippingが唯一のアドレスタイプであり、同じIDを持つ2つ以上の行がないことを前提としています。 – jussius
@jussius:データサンプルに基づいて、これは機能します。また、これらのレコード間の関係を特定するために使用されるフィールドは、「ID」だけです。 –
これは、請求タイプの行のみを返します。請求書付きの重複行がない場合は、送料を返却する必要があります。 –
はこれを試してみてください -
SELECT *, ADDRESS
FROM (SELECT MIN(ID), ADDRESSTYPE
FROM YOUR_TABLE
GROUP BY ADDRESS) X
での結果は、それが 'Billing'だけ重複しているIDのがあるだろうと仮定しても大丈夫ですか? –
ちょうどアイデア。 where句には2つの条件を含める必要があります最初に、特定のIDを持つ行が1つしかないことを確認します。それは、countを持つ副問い合わせを実行することによって行うことができます。 2番目の条件は、アドレスタイプが課金かどうかをチェックします。 OR演算を使用する必要があります。 –