2013-03-21 17 views
6

İki sütuna göre yinelenen satırları silmek istiyorum ama hepsinden 1 satır tutmalıyım.yinelenen satırları silin ve bunların tümünü mysql içinde tutmanız gerekir

yinelenen satırlar gibi ikiden fazla satır, ben 3 yukarıdan 2 sıra herhangi silip 1 satır tutmak istiyorum

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

olabilir. Ayrıca silme deyimini yürütür sonra tekrar yinelenen kayıtları ekleyemezsiniz böylece, sütun üzerinde benzersiz bir kısıtlama uygulamak

+0

tasarım kusurlu ... Eğer NIL 1234 sadece bir kez ana tuşa basmanız veya en azından bir kez yapmanız gerektiğinde ortaya çıkarsa özendirdiği için denetler armadoru böylece veritabanı – ITroubs

cevap

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 

,

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

sen 'Rica ederim tutarlı kalır: Bu gibi mysql Sorgunuzla kullanılan D ' –

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

Merhaba Matt,' tabloismi DAN SİL NEREDE tablename.ID DEĞİL İÇİNDE (FROM yan tümcesinde güncelleme için hedef tablo 'dilimini' belirleyemezsiniz - ADA GÖRE tabloadı GROUP, TELEFON) ' Ama hata altına alıyorum, # 1093 DAN MIN (ID) SEÇ – Neel

İlgili konular