2010-12-06 7 views
1

J'ai une situation où j'ai une table qui ressemble à ceci:la suppression des doublons d'une table mySQL en utilisant une combinaison de deux colonnes de

Tx1 TX2 Val 
SP1 SP1 1 
SP1 SP2 0.56 
SP1 SP3 0.78 
SP2 SP1 0.56 
SP2 SP2 1 
SP2 SP3 0.47 
SP3 SP1 0.78 
SP3 SP2 0.47 
SP3 SP3 1 

Je voudrais mySQL pour trier les doublons en utilisant tous des combinaisons des colonnes 1 et 2 (Txl & 2). Tels que je reçois:

Tx1 TX2 Val 
SP1 SP1 1 
SP1 SP2 0.56 
SP1 SP3 0.78 
SP2 SP2 1 
SP2 SP3 0.47 
SP3 SP3 1 

Quelqu'un peut-il suggérer une requête qui fera cela?

Merci, Dave.

+0

Quelle est la clé primaire de la table? Quelle est la règle pour détecter les doublons? La valeur doit-elle être la même? Si non, quelle valeur doit-on conserver pour une combinaison particulière «Tx1 & 2»? –

Répondre

1

Quelque chose comme cela devrait fonctionner:

DELETE FROM tablename 
WHERE id IN (
    SELECT id FROM tablename 
    GROUP BY CONCAT(Tx1,":",Tx2) 
    HAVING COUNT(*) > 1 
) 

Je crois que ce ne supprime que le premier doublon. Donc, si vous avez des triplicats (etc.), vous devrez réexécuter la requête.

+0

Merci Paul, cela prend-il en compte le problème où vous avez SP2 & SP3 vs SP3 & SP2? S'ils sont concaténés, ces deux choses ne sembleront-elles pas différentes? – David

+0

Non, il ne gérera pas ce cas. Je ne peux pas penser à quelque chose d'intelligent pour le moment. Ce serait beaucoup plus facile de le faire en code (PHP, etc.). –

Questions connexes