2013-04-24 8 views
6

Lavoro su un set di dati con tre colonne differenti: pile, position e info.Trova duplicati per la combinazione di due colonne in un database MySQL

Non c'è duplicato nel database, ma può succedere che per una combinazione di pile e position ci siano uno o due testi diversi nella colonna di informazioni. E quelle sono le voci che ho cercato di trovare.

ho provato la seguente

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

Ma ha ricevuto un messaggio di errore

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

Esiste un modo per trovare le combinazioni distinte di valori in due colonne?

+0

provare questo ** SELECT COUNT (DISTINCT ('pile' + 'position')) FROM db; ** – Luv

risposta

11

Questo funziona anche senza subselect.

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

Il comando di cui sopra mostra tutte le combinazioni di pile e position che si verificano più di una volta nella tabella db.

0

per ottenere il conteggio dei duplicati distinte (gruppo da utilizzare di preferenza qui)

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

Per trovare i record duplicati effettivi

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

Non devi analizzare ... – 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 
); 

Ora, per other_field è possibile utilizzare alcuni colonna ID univoco, o qualsiasi combinazione di campi (ad eccezione di {palo, postion} ovviamente)