从表中选择一个字段重复的所有列

时间:2017-06-21 14:16:10

标签: sql-server

我试图获取包含重复电子邮件的用户列表(所有数据)。 我可以使用

获取所有电子邮件
SELECT EMAIL, Count(*) 
FROM USER_TABLE
Group By EMAIL having COUNT(*) > 1

并返回一个电子邮件表及其计数(大于1)。

我可以编写一个查询,然后执行

SELECT * 
FROM USER_TABLE 
WHERE EMAIL IN ('dup@email.com', 'dup2@email.com' ...);` 

但这要求我始终先运行第一个查询,然后将它们全部复制粘贴到IN语句中。

将这些结合起来的最佳方法是什么?好吧没有真正结合,我不关心有多少重复,我只想要有重复电子邮件的用户的所有用户信息。

3 个答案:

答案 0 :(得分:1)

你几乎自己编写了整个解决方案。您只需将第一个查询作为IN而不是硬编码列表。

SELECT * 
FROM USER_TABLE 
WHERE EMAIL IN
(
    SELECT EMAIL
    FROM USER_TABLE
    GROUP By EMAIL 
    HAVING COUNT(*) > 1
)

答案 1 :(得分:1)

使用窗口功能COUNT:

SELECT *
FROM
(
    SELECT
        u.*,
        COUNT(*) OVER (PARTITION BY u.Email) AS Cnt
    FROM USER_TABLE u
) AS t
WHERE t.Cnt > 1

答案 2 :(得分:0)

我们也可以尝试将USER_TABLE表自加入您的第一个原始查询:

SELECT t1.*
FROM USER_TABLE t1
INNER JOIN
(
    SELECT EMAIL 
    FROM USER_TABLE
    GROUP BY EMAIL
    HAVING COUNT(*) > 1
) t2
    ON t1.EMAIL = t2.EMAIL