从大量员工中检索重复的 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, '')
我编写了此查询以获取具有相同 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, '')