【问题标题】:Returning all records sharing email address but that have different address, firstname and lastname返回所有共享电子邮件地址但地址、名字和姓氏不同的记录
【发布时间】:2016-12-13 14:06:17
【问题描述】:

得到一个 oracle 表,其中一些记录共享电子邮件地址,但名字、姓氏或地址不同。如何仅获取共享电子邮件地址但其名字、姓氏或地址的记录。到目前为止我所拥有的:

SELECT unique_id, firstname, lastname, email ,address
FROM customers
WHERE email in (SELECT email
                FROM customers
                GROUP BY email
                HAVING COUNT(email) > 1)

这将返回记录共享电子邮件的列表,但在某些行中名字、姓氏和地址是相同的

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您应该检查 firstname、lastname 和 address 的不同计数,看看它们中的任何一个是否 > 1。

    SELECT unique_id,firstname,lastname,email,address
    FROM customers 
    WHERE email in (SELECT email 
                    FROM customers 
                    GROUP BY email 
                    HAVING COUNT(DISTINCT FIRSTNAME) > 1
                    OR COUNT(DISTINCT LASTNAME) > 1
                    OR COUNT(DISTINCT ADDRESS) > 1) 
    

    【讨论】:

    • 谢谢,我认为改变做到了!
    【解决方案2】:

    要在单表扫描中完成,可以使用解析函数:

    SELECT unique_id,
           firstname,
           lastname,
           email,
           address
    FROM   (
      SELECT unique_id,
             firstname,
             lastname,
             email,
             address,
             COUNT( DISTINCT firstname ) OVER ( PARTITION BY email ) AS num_fn,
             COUNT( DISTINCT lastname  ) OVER ( PARTITION BY email ) AS num_ln,
             COUNT( DISTINCT address   ) OVER ( PARTITION BY email ) AS num_ad
      FROM customers
    )
    WHERE    num_fn > 1 OR num_ln > 1 OR num_ad > 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多