私は大きなテーブルを持っていますが、この質問の目的のために、次の列構造があると仮定しましょう:
特定の列で電子メール アドレスが異なる行のみを返す Where ステートメントが必要です。
考え?
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
ほとんどのデータベースでは、これを行うことができます
select t.AccountId, t.BillingEmail
from (select t.*, count(*) over (partition by BillingEmail) as cnt
from t
) t
where cnt = 1
このアプローチの利点は、テーブルから好きなだけ列を取得できることです。
私は 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
)