如何删除仅由ID不同的两行

时间:2008-12-19 01:13:52

标签: sql mysql

我有一个脚本,它使用相同的数据对数据库进行双重插入。有没有一种好方法可以做到这一点(没有扫描,将每个记录插入一个数组,然后删除重复的数组条目)?

4 个答案:

答案 0 :(得分:10)

DELETE
FROM t
WHERE ID IN (
    SELECT MAX(ID)
    FROM t
    GROUP BY {Your Group Criteria Here}
    HAVING COUNT(*) > 1
)

答案 1 :(得分:2)

MySQL支持多表DELETE,这非常酷,可以在这里提供帮助。您可以对除id之外的所有列的相等性进行自联接,然后使用较大的id删除匹配的行。

DELETE t2
 FROM mytable t1 JOIN mytable t2
  USING (column1, column2, column3) -- this is an equi-join
WHERE t1.id < t2.id;

答案 2 :(得分:1)

或者旧的简单方式,如果它不是最快的话,我会感到惊讶。特别是比匹配GROUP BY聚合函数更快。

从mytable m1删除 在哪里存在
(   选择1来自mytable
  WHERE字段= m1.fields
  AND id&lt; m1.id )

答案 3 :(得分:0)

如果你现在没有按键引用表的任何内容,我会mysqldump --complete-插入它,删除主键,更改表定义以强制执行某些唯一键或另一个会捕获你的键重复,将INSERT更改为REPLACE,并重新加载数据。获取一个漂亮的干净表,PK序列中没有空洞或删除行。