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 回答