【问题标题】: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) &lt;&gt; 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-19
        • 2019-03-20
        • 2019-11-11
        • 2023-03-12
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多