2013-03-21 39 views
6

我想刪除基於兩列的重複行,但需要保持1行所有這些行。刪除重複的行,並需要保持其中的所有人在mysql

重複行可以多於兩排等,

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

我想從上面3刪除任何的2行,並保持1行。

+0

另外,設計是有缺陷的...如果NIL 1234只應該出現一次,你應該使主鍵或至少使裝配工,檢查了所有腦幹讓你的數據庫保持一致 – ITroubs 2013-03-21 13:18:51

回答

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 

已執行delete語句後,執行該列上的唯一約束,所以你不能再插入重複的記錄,

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

歡迎您':D' – 2013-03-22 05:23:33

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

您好馬特, 我用你的查詢在MySQL這樣 'DELETE FROM 表名 WHERE tablename.ID NOT IN(在FROM子句您不能指定目標表 '時區' 的更新 - SELECT MIN(ID) FROM表名 GROUP BY姓名,電話)' 但我得到下面的錯誤我, #1093 – Neel 2013-03-22 03:48:00

相關問題