Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除MySQL中部分相似的行_Mysql_Sql - Fatal编程技术网

删除MySQL中部分相似的行

删除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

我需要使用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 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中:

当前,您不能从表中删除,也不能从表中选择 子查询中的表

至少对于5.0版本。()

因此,在mysql中,您可以使用:

在这里,您可以看到GROUP BY的手册:

教程:

注:

在MySQL中:

当前,您不能从表中删除,也不能从表中选择 子查询中的表

至少对于5.0版本。()

因此,在mysql中,您可以使用:


谢谢你的回复。我的问题是针对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)