我有一个脚本,它使用相同的数据对数据库进行双重插入。有没有一种好方法可以做到这一点(没有扫描,将每个记录插入一个数组,然后删除重复的数组条目)?
答案 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序列中没有空洞或删除行。