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

retrieving the duplicate SSN from the huge number of employess all of them

我编写了此查询以获取具有相同 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); 

你想要一组有多个记录(重复),所以使用

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, '')