0

私は大きなテーブルを持っていますが、この質問の目的のために、次の列構造があると仮定しましょう:

ここに画像の説明を入力

特定の列で電子メール アドレスが異なる行のみを返す Where ステートメントが必要です。

考え?

4

3 に答える 3

3
SELECT BillingEMail
FROM   tableName
GROUP  BY BillingEMail
HAVING COUNT(BillingEMail) = 1 

またHAVING COUNT(*) = 1

使用しているRDBMSはわかりませんが(分析関数の使用を紹介できない理由)、すべての列を取得したい場合は、サブクエリと結合することでこれを行うことができます

SELECT a.*
FROM   tableName a
       INNER JOIN
      (
        SELECT BillingEMail
        FROM   tableName
        GROUP  BY BillingEMail
        HAVING COUNT(BillingEMail) = 1 
      )b ON a.BillingEMail = b.BillingEMail
于 2013-02-08T14:15:48.037 に答える
2

ほとんどのデータベースでは、これを行うことができます

select t.AccountId, t.BillingEmail
from (select t.*, count(*) over (partition by BillingEmail) as cnt
      from t
     ) t
where cnt = 1

このアプローチの利点は、テーブルから好きなだけ列を取得できることです。

于 2013-02-08T14:17:24.880 に答える
0

私は JW のアプローチを好みますが、NOT EXISTS を使用した別のアプローチを次に示します。

SELECT AccountID, [Billing Email]
FROM   table t1
WHERE  NOT EXISTS (
    -- Make sure that no other row contains the same
    -- email, but a different Account ID.
    SELECT 1
    FROM   table t2
    WHERE  t1.[Billing Email] = t2.[Billing Email]
    AND    t1.AccountID <> t2.AccountID
)
于 2013-02-08T14:18:22.867 に答える