mysql - 删除 MySQL 中部分相似的行

标签 mysql sql

我需要使用 MySQL 删除表中部分相似的行。例如:

来自table1(id,color1,color2,key)的内容:

id,color1,color2,key
-----------------------------
1,Blue,Green,AASDDD
2,Blue,Green,JJUUYYY
3,Blue,Red,HHYYY
4,Green,Red,KKIII
5,Blue,Red,KKIIUUUU

我想删除 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 中删除重复行的帖子,但不是针对部分匹配的行。)

最佳答案

DELETE FROM table1 
WHERE id NOT IN (SELECT min(id) 
                 FROM table1 
                 GROUP BY color1, color2)

编辑

MySQL 无法从具有同一表的子查询的表中删除。要解决该限制,您可以这样做:

DELETE FROM table1 
WHERE id NOT IN (select * from (SELECT min(id) 
                               FROM table1 
                               GROUP BY color1, color2) t)

关于mysql - 删除 MySQL 中部分相似的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11539643/

相关文章:

MySQL:无法根据自动增量键更新单个记录

php - 查询顺序降序的问题

php - 在 FileRun 中查看 User_Groups 表时,phpMyAdmin 中出现以下错误

sql - Postgres : convert array of elements to multiple rows

php - 具有 2 个表和多个条目的 MySQL 查询 JOIN

mysql - 供远程 Excel 用户使用的数据库

mysql - 我应该对许多分类行使用单个表吗?

android - 如何将 Android 数据库与在线 SQL Server 同步?

java - 需要在同一列中一次上传多张图片

php - MySQL 查询多个列上的多个 JOIN 两个表