mysql - 使用 MySQL 从数据库中删除重复项

标签 mysql sql

我正在 MySQL 中工作,试图将一堆条目插入表中。我需要删除许多半重复的内容。我想删除除一个之外的所有半重复项。当我运行下面的代码时,它似乎通过仅保留具有多个半重复项的条目来删除我不想删除的所有内容。如何删除除一个半重复项之外的所有项,同时保留其他所有项的条目?

delete from t where (ColA, ColB, ColC) in 
(select * from (select ColA, ColB, ColC from t 
group by ColA, ColB, ColC having count(*) > 1) as t);

最佳答案

好吧,我认为如果不使用 where 就无法解决这个问题 但是您无法使用同一个表对 DELETE 进行 SELECT WHERE 操作

来 self 的数据库的示例

delete from tb_test where idtb_test not in (
select idtb_test from tb_test T1 
WHERE T1.title in (select title from tb_test T2  group by T2.title having count(*) =1)
)

此查询搜索列标题上的非重复行,并删除除所选行之外的所有行

Mysql 错误:

Error Code: 1093. You can't specify target table 'tb_test' for update in FROM clause

关于mysql - 使用 MySQL 从数据库中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44075177/

相关文章:

mysql - 在 MySQL 中压平一棵树?

mysql - 复杂的SQL查询建议

mysql - 如何获取同一个表的行之间所有可能的组合

mysql - 我正在尝试在 MySql 中使用自动增量,它应该以特定数字开头

sql - 将一个表中的列插入到具有约束的另一个表中

大型只写表上的 MySQL 性能

mysql - Docker 容器无法连接到其 mysql 服务器(访问被拒绝)

MySQL 左连接单个表

mysql - Laravel 关系未按预期工作 - 租车搜索

mysql - 具有两个排序值的 Group by 的 SQL 查询并计算相等值