我试图获取包含重复电子邮件的用户列表(所有数据)。 我可以使用
获取所有电子邮件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
语句中。
将这些结合起来的最佳方法是什么?好吧没有真正结合,我不关心有多少重复,我只想要有重复电子邮件的用户的所有用户信息。
答案 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