【问题标题】:SQL - Select all rows that have the same Email but different NameSQL - 选择所有具有相同电子邮件但名称不同的行
【发布时间】:2015-05-28 02:38:01
【问题描述】:
我正在尝试选择表中具有相同Email 但具有不同Name 的所有用户。到目前为止,我已经设法获得了所有重复 Email 的行,但我被困在下一步了。
SELECT * FROM users WHERE Email IN
(SELECT Email FROM users GROUP BY Email HAVING COUNT(*) > 1)
提前致谢
【问题讨论】:
标签:
sql
select
count
group-by
duplicates
【解决方案1】:
您可以尝试以下方法:
SELECT u.*
FROM users u
LEFT JOIN (
SELECT Email
FROM users
GROUP BY Email
HAVING COUNT(*) = COUNT(DISTINCT name)
) tmp ON u.Email = tmp.Email
WHERE tmp.Email IS NOT NULL
【解决方案2】:
试试这个
SELECT *
FROM users U1
INNER JOIN
users U2
on U1.Email=U2.Email
AND U1.Name <> U2.Name
【解决方案3】:
我想你只是想在子查询中使用count(distinct name):
SELECT *
FROM users
WHERE Email IN (SELECT Email
FROM users
GROUP BY Email
HAVING COUNT(distinct Name) > 1
) ;
对于having 子句,我更喜欢having min(name) <> max(name)。效率稍高。
然而,最有效的方法可能是使用窗口函数:
select u.*
from (select u.*, min(name) over (partition by email) as minname,
max(name) over partition by email) as maxname
from users u
) u
where minname <> maxname;