2013-03-21 53 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

相关问题