mysql的delete语句使用exists删除数据走不通

Posted 左直拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的delete语句使用exists删除数据走不通相关的知识,希望对你有一定的参考价值。

mysql中,打算使用exists查找相关记录,然后删除,结果搞不定。

我们有个表folder,里面有个字段code存在重复值,本来编码应该是唯一的。因此想将重复记录删除。

这样

delete from folder fd1 where exists(
select 1 from folder fd2 where id<>fd1.id and code=fd1.code);

不行!

这样

delete from folder where id in(
select id from folder fd1 where exists(
select 1 from folder fd2 where id<fd1.id and code=fd1.code));

还是不行!

查找网上的例子

DELETE tb
    FROM tb LEFT JOIN
         tb tb2
         ON tb2.`merchantId` = 'A32WNPGI8GE4WW' AND
            tb2.`marketplaceId` IN ('A1AM78C64UM0Y8', 'A2EUQ1WTGCTBG2', 'ATVPDKIKX0DER')
    WHERE tb2.merchantID IS NULL;

我去,这是什么鬼,看不懂。

心一横,使出绝招,先将重复记录的ID保存进临时表,然后结合该临时表删除,最后打扫战场,删除临时表,深藏功与名。

create temporary table tmp_folder_id as select id from folder fd1 where exists(select 1 from folder fd2 where id<fd1.id and code=fd1.code);

delete from folder where id in(select id from tmp_folder_id);

drop table tmp_folder_id;

以上是关于mysql的delete语句使用exists删除数据走不通的主要内容,如果未能解决你的问题,请参考以下文章

mysql 生产库大表delete

MySQL 中delete删除sql语句用法

MySQL基础-13DML语言(数据操作语言)-3.删除语句

mysql 删除语句:droptruncate和delete

多表级联删除表数据特别慢

MySQL关于命令的问题Exists关键字