我有一张大桌子,但出于这个问题的目的,假设我有以下列结构:
我想要一个 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
)