删除MySQL中部分相似的行
我需要使用MySQL删除表中部分相似的行。例: 从表1(id、color1、color2、key)内容: 我想删除color1、color2中的重复行,并获取:删除MySQL中部分相似的行,mysql,sql,Mysql,Sql,我需要使用MySQL删除表中部分相似的行。例: 从表1(id、color1、color2、key)内容: 我想删除color1、color2中的重复行,并获取: id,color1,color2,key ----------------------------- 1,Blue,Green,AASDDD 3,Blue,Red,HHYYY 4,Green,Red,KKIII 差不多 delete FROM table1 WHERE Exists(SELECT color1,color2 FROM
id,color1,color2,key
-----------------------------
1,Blue,Green,AASDDD
3,Blue,Red,HHYYY
4,Green,Red,KKIII
差不多
delete FROM table1 WHERE Exists(SELECT color1,color2 FROM table1)
在MySQL中不创建临时表的最好方法是什么
(我知道MySQL中有很多关于删除重复行的帖子,但不是关于部分匹配行的。)
编辑
MySQL无法从具有相同表的子查询的表中删除。要解决该限制,您可以执行以下操作:
DELETE FROM table1
WHERE id NOT IN (select * from (SELECT min(id)
FROM table1
GROUP BY color1, color2) t)
编辑
MySQL无法从具有相同表的子查询的表中删除。要解决该限制,您可以执行以下操作:
DELETE FROM table1
WHERE id NOT IN (select * from (SELECT min(id)
FROM table1
GROUP BY color1, color2) t)
在这里,您可以看到GROUP BY的手册:
教程:
谢谢你的回复。我的问题是针对MySQL的,通过您的查询可以得到:[Err]1093-您不能从第条中指定要更新的目标表'verbal_set'。您可以使用一个临时表来存储子查询,然后删除表1中不在临时表中的所有项。这正是我想要避免的。这个表很大,索引也很重。在MySQL中一定有这样做的方法。我认为这肯定不是最有效的方法,但它确实有效。谢谢大家!@米盖尔:很抱歉,我想不出更好的解决办法。您可以使用临时表,但这会更慢。谢谢您的回复。我的问题是针对MySQL的,通过您的查询可以得到:[Err]1093-您不能从第条中指定要更新的目标表'verbal_set'。您可以使用一个临时表来存储子查询,然后删除表1中不在临时表中的所有项。这正是我想要避免的。这个表很大,索引也很重。在MySQL中一定有这样做的方法。我认为这肯定不是最有效的方法,但它确实有效。谢谢大家!@米盖尔:很抱歉,我想不出更好的解决办法。您可以使用临时表,但这会更慢。嗨。在MySQL中,通过此查询,您将得到:[Err]1093-您不能在from子句中为更新指定目标表'verbal_set'。您的查询在SQLite或SQL Server下工作,但在MySQL下有此限制。你可以找到很多关于这方面的帖子,但我正在寻找一个干净的例子来清理部分重复。在MySQL中,通过此查询,您将得到:[Err]1093-您不能在from子句中为更新指定目标表'verbal_set'。您的查询在SQLite或SQL Server下工作,但在MySQL下有此限制。你可以找到很多关于这方面的帖子,但我正在寻找一个干净的例子来清除部分重复。
DELETE FROM table1
WHERE id NOT IN (select * from (SELECT min(id)
FROM table1
GROUP BY color1, color2) t)
DELETE FROM table1 WHERE id NOT IN (SELECT min(id) FROM table1 GROUP BY color1, color2)
BEGIN;
CREATE TEMPORARY TABLE colors_temp SELECT min(id) as id FROM table1 GROUP BY color1, color2;
DELETE FROM table1 WHERE id NOT IN (SELECT id FROM colors_temp);
DROP TABLE colors_temp;
COMMIT;
DELETE FROM table1
WHERE id NOT IN (SELECT MIN(id) FROM table1 GROUP BY colo1, color2)