哪个声明带/不同

时间:2013-02-08 14:14:18

标签: sql where

我有一张大桌子但是出于这个问题的目的,让我们假设我有以下列结构:

enter image description here

我希望有一个Where语句,只返回该特定列中电子邮件地址不同的行。

思想?

3 个答案:

答案 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
)