2013-03-21 12 views
6

Voglio eliminare le righe duplicate in base a due colonne ma è necessario mantenere tutte e 1 le righe.elimina le righe duplicate e deve conservarne uno da tutti in mysql

righe duplicati possono essere più di due file come,

ID NAME PHONE 
-- ---- ---- 
1 NIL 1234 
2 NIL 1234 
3 NIL 1234 
4 MES 5989 

voglio eliminare qualsiasi 2 righe dall'alto 3 e mantenerlo 1 fila.

+0

Anche il il design è difettoso ... se NIL 1234 dovesse apparire solo una volta che dovresti farne la chiave primaria o almeno farlo rigger che verifica l'esistenza in modo che il database rimane coerente – ITroubs

risposta

16
DELETE a 
FROM tableA a 
     LEFT JOIN 
     (
      SELECT MIN(ID) ID, Name, Phone 
      FROM TableA 
      GROUP BY Name, Phone 
     ) b ON a.ID = b.ID AND 
       a.NAme = b.Name AND 
       a.Phone = b.Phone 
WHERE b.ID IS NULL 

Dopo aver eseguito l'istruzione DELETE, imporre un vincolo univoco sulla colonna in modo non è possibile inserire di nuovo i record duplicati,

ALTER TABLE TableA ADD CONSTRAINT tb_uq UNIQUE (Name, Phone) 
+0

sei il benvenuto ': D' –

1
DELETE 
FROM Table 
WHERE Table.id NOT IN ( 
    SELECT MIN(idTable) idtable 
    FROM idTable 
    GROUP BY name, phone) 
+0

Ciao Matt, ho usato la query in MySQL come questo ' DELETE FROM tablename DOVE tablename.ID NOT IN ( SELEZIONA MIN (ID) FROM nometabella gruppo per nome, TELEFONO) ' Ma io sono sempre sotto l'errore, # 1093 - non è possibile specificare tabella di destinazione 'fuso orario' per l'aggiornamento nella clausola FROM – Neel

Problemi correlati