从大量的雇员中检索重复的SSN

时间:2015-06-12 10:31:57

标签: sql oracle-sqldeveloper

我已经写了这个查询来获取具有相同SSN号码的员工。但是这个问题给了我所有的就业机会,无法弄清楚它是什么问题。

SELECT a.empid, 
       a.NAME, 
       a.ssn 
FROM   p_data a 
WHERE  ssn IN (SELECT ssn 
               FROM   p_data b 
               WHERE  b.ssn = a.ssn 
               GROUP  BY ssn 
               HAVING ( a.ssn ) > 1); 

1 个答案:

答案 0 :(得分:1)

您希望组有多个记录(重复),请使用

HAVING COUNT( * ) > 1); 

而不是

HAVING ( a.ssn ) > 1); 

另一种应该更有效的方法:

SELECT a.empid, 
       a.NAME, 
       a.ssn 
FROM   p_data a 
WHERE EXISTS
(
    SELECT 1 FROM p_data a2
    WHERE  a.empid <> a2.empid
    AND    a.ssn = a2.ssn 
)

如果SSN可以为空,这也有效。然后你只需要将最后一行改为:

AND COALESCE(a.ssn, '') = COALESCE(a2.ssn, '')