我有一张大桌子但是出于这个问题的目的,让我们假设我有以下列结构:
我希望有一个Where语句,只返回该特定列中电子邮件地址不同的行。
思想?
答案 0 :(得分: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
答案 1 :(得分:2)
在大多数数据库中,您可以执行此操作
select t.AccountId, t.BillingEmail
from (select t.*, count(*) over (partition by BillingEmail) as cnt
from t
) t
where cnt = 1
这种方法的优点是你可以从表中获得任意数量的列。
答案 2 :(得分: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
)