2013-04-24 22 views
6

Pracuję na zestawie danych z trzema różnymi kolumnami: pile, position i info.Znajdź duplikaty dla połączenia dwóch kolumn w bazie danych MySQL

Nie ma duplikatu w bazie danych, ale może się zdarzyć, że w przypadku jednej kombinacji pile i position istnieje jeden lub dwa różne teksty w kolumnie informacyjnej. I są to wpisy, które próbowałem znaleźć.

Próbowałem następujące

SELECT COUNT(DISTINCT(`pile`, `position`)) FROM db; 

Ale komunikat o błędzie

ERROR 1241 (21000): Operand should contain 1 column(s) 

Czy istnieje sposób, aby znaleźć różne kombinacje wartości w dwóch kolumnach?

+0

spróbować tego ** SELECT COUNT (DISTINCT ('pile' + 'position')) Z DB; ** – Luv

Odpowiedz

11

To działa nawet bez obsługę żądań.

SELECT 
    `pile`, 
    `position`, 
    COUNT(*) AS c 
FROM 
    db 
GROUP BY 
    `pile`, 
    `position` 
HAVING c > 1; 

Polecenie powyżej zawiera wszystkie kombinacje pile i position, które występują więcej niż jeden raz w tabeli db.

0

Aby uzyskać zliczania odrębnych duplikatów (grupa używanych zamiast tutaj)

select count(*) 
    from (
    select pile, position 
    from db 
group by pile, position 
     ) x 

znaleźć rzeczywiste zduplikowane rekordy

select db.* 
    from (
    select pile, position 
    from db 
group by pile, position 
    having count(*) > 1 
     ) x 
    join db on db.pile = x.pile and db.position = x.position 
+0

Nie będziesz parsował ... – Rog

0
SELECT * 
FROM db x 
WHERE EXISTS (
    SELECT 1 FROM db y 
    WHERE y.pile = x.pile 
    AND y.position =x.postion 
    AND y.other_field <> x.other_field 
); 

Teraz, other_field można użyć jakiś unikalny kolumnę ID, lub dowolną kombinację pól (za wyjątkiem {bieguna, stanowisko służbowe} oczywiście)