SQL-选择具有相同电子邮件但名称不同的所有行
我正在尝试选择表中具有相同电子邮件但名称不同的所有用户。到目前为止,我已经设法得到了所有的行有重复的电子邮件,但我卡在了下一步SQL-选择具有相同电子邮件但名称不同的所有行,sql,select,count,group-by,duplicates,Sql,Select,Count,Group By,Duplicates,我正在尝试选择表中具有相同电子邮件但名称不同的所有用户。到目前为止,我已经设法得到了所有的行有重复的电子邮件,但我卡在了下一步 SELECT * FROM users WHERE Email IN (SELECT Email FROM users GROUP BY Email HAVING COUNT(*) > 1) 提前感谢您可以尝试以下方法: SELECT u.* FROM users u LEFT JOIN ( SELECT Email FROM users
SELECT * FROM users WHERE Email IN
(SELECT Email FROM users GROUP BY Email HAVING COUNT(*) > 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
您可以尝试以下操作:
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
试试这个
SELECT *
FROM users U1
INNER JOIN
users U2
on U1.Email=U2.Email
AND U1.Name <> U2.Name
试试这个
SELECT *
FROM users U1
INNER JOIN
users U2
on U1.Email=U2.Email
AND U1.Name <> U2.Name
我想您只需要在子查询中使用countdistinct名称:
SELECT *
FROM users
WHERE Email IN (SELECT Email
FROM users
GROUP BY Email
HAVING COUNT(distinct Name) > 1
) ;
对于having子句,我更喜欢使用minname maxname。它的效率稍微高一点
但是,最有效的方法可能是使用窗口函数:
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;
我想您只需要在子查询中使用countdistinct名称:
SELECT *
FROM users
WHERE Email IN (SELECT Email
FROM users
GROUP BY Email
HAVING COUNT(distinct Name) > 1
) ;
对于having子句,我更喜欢使用minname maxname。它的效率稍微高一点
但是,最有效的方法可能是使用窗口函数:
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;
那么问题是什么?您的RDBMS是-?那么问题是什么?您的RDBMS是-?