SQL选择一列中具有重复值的所有行
Posted
技术标签:
【中文标题】SQL选择一列中具有重复值的所有行【英文标题】:SQL to select all rows with duplicate values in one column 【发布时间】:2016-07-22 21:35:54 【问题描述】:我有一个 users
表,在 employee_id
列中有重复值。我需要列出所有具有重复employee_id 的行及其名称。我需要查看所有具有重复 employee_id
的用户,以便我可以消除哪些值有效的冲突。
SELECT name,employee_id
FROM users;
name | employee_id
-----------------------
jason 12345
tom 34567
jane 12345
will 01020
bill 12345
我需要返回:
name | employee_id
-------------------------
jason 12345
jane 12345
bill 12345
我看到类似的问题,但我仍然无法获得所需的正确语法。在下面我只出现一次。我需要所有出现重复的employee_id
像上面一样。
SELECT employee_id, MAX(name)
FROM users
GROUP BY employee_id
HAVING COUNT(employee_id) > 1;
【问题讨论】:
【参考方案1】:你可以使用窗口化的COUNT
:
SELECT sub.name, sub.employee_id
FROM (SELECT *, COUNT(*) OVER(PARTITION BY employee_id) AS c
FROM users) AS sub
WHERE c > 1;
LiveDemo
或者简单的IN
:
SELECT *
FROM users
WHERE employee_id IN (SELECT employee_id
FROM users
GROUP BY employee_id
HAVING COUNT(employee_id) > 1);
LiveDemo2
或相关子查询:
SELECT name, employee_id
FROM users u
,LATERAL (SELECT COUNT(*) FROM users u2 WHERE u.employee_id = u2.employee_id) AS s(c)
WHERE c > 1;
SqlFiddleDemo
【讨论】:
以上是关于SQL选择一列中具有重复值的所有行的主要内容,如果未能解决你的问题,请参考以下文章