2016-04-03 4 views
4

Ich habe eine users Tabelle mit doppelten Werten in der Spalte employee_id. Ich muss alle Zeilen mit doppelten employee_ids zusammen mit ihren Namen auflisten. Ich muss alle Benutzer mit einem Duplikat employee_id sehen, damit ich de-Konflikt, welche Werte gültig sind.SQL, um alle Zeilen mit doppelten Werten in einer Spalte auszuwählen

SELECT name,employee_id 
FROM users; 

name  | employee_id 
----------------------- 
jason  12345 
tom  34567 
jane  12345 
will  01020 
bill  12345 

Ich muss zurück:

name  | employee_id 
------------------------- 
jason  12345 
jane   12345 
bill   12345 

ich ähnliche Fragen, aber ich kann immer noch nicht die richtige Syntax bekommen ich brauche. Mit dem Folgenden bekomme ich nur ein Vorkommnis. Ich brauche alle Vorkommen mit Duplikat employee_id wie oben.

SELECT employee_id, MAX(name) 
FROM users 
GROUP BY employee_id 
HAVING COUNT(employee_id) > 1; 

Antwort

8

könnten Sie verwenden Fenster 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

oder einfach IN:

SELECT * 
FROM users 
WHERE employee_id IN (SELECT employee_id 
         FROM users 
         GROUP BY employee_id 
         HAVING COUNT(employee_id) > 1); 

LiveDemo2

oder korrelierte Unterabfrage:

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

+1

Das ist großartig, danke! – Jason

Verwandte Themen