2009-04-14 23 views
0

Ich habe eine Tabelle mit den Spalten ID, a und b.So finden Sie doppelte Feldkombination

a + b sollte eindeutig sein, aber dies ist eine Legacy-Datenbank, die nicht korrekt eingeschränkt ist. Wie kann ich eine Reihe von IDs für Datensätze erhalten, in denen a + b nicht eindeutig ist?

Wenn ich

ID A B 
1 2 3 
2 2 3 
3 1 3 
4 1 4 

Dann möchte ich Aufzeichnungen bekommen 1 und 2 zurück aus der Abfrage.

+0

ähnliche Frage (neuere, verschiedene Ansätze) http://StackOverflow.com/a/3504059/5962841 – Mafii

Antwort

4
select 
    id, a, b 

from your_table t 

join (select a, b from your_table group by a, b having count(1) > 1) dup on dup.a = t.a and dup.b = t.b 
+1

Verdammt, Sie haben mich dazu geschlagen. Sogar bis zur Methode (JOIN) und Formulierung. Aber meine scrollt nicht. Hah! ;-) +1 für schneller sein. – Tomalak

3

Um wieder Reihen 1 und 2 (wie Sie angegeben), verwenden Sie diese:

SELECT 
    * 
FROM 
    your_table 
    INNER JOIN (
    SELECT a, b FROM your_table GROUP BY a, b HAVING COUNT(*) > 1 
) dupes ON 
    your_table.a = dupes.a AND 
    your_table.b = dupes.b 
+0

Sieht bekannt aus;) –

+0

* lol * Aber das war nicht so von Anfang an. Niemand kann es beweisen, aber * ich weiß *. ;-) – Tomalak

1

Etwas schnellen Funktionen Fenster:

select * 
from (
    select 
     a 
    , b 
    , cnt = count(*) over (partition by a, b) 
    from your_table 
) x 
where cnt > 1; /* Dupe */