删除不同表中的条目 MySQL 查询

Posted

技术标签:

【中文标题】删除不同表中的条目 MySQL 查询【英文标题】:Delete Entrys in different Tables MysQL Query 【发布时间】:2013-06-07 11:40:34 【问题描述】:

我在想,如何使用 INNER JOIN 删除数据库中的一些条目。

我有 2 个不同的表,USER 和 BLOGS

当条目属于不存在的用户时,我正在尝试删除 BLOGS 中的所有条目。因此,在 USER 表中,所有用户都以唯一 ID 列出。这个相同的 ID 也在表 BLOGS 中。

这样的查询可以工作,但我想这甚至不是一个正确的 mysql 查询:

delete from BLOGS where `id` does not exist in USER;

我知道,“不存在”这个命令真的不起作用。

有什么想法吗?提前致谢。

【问题讨论】:

【参考方案1】:

试试这个

DELETE FROM BLOGS WHERE `id`  NOT IN
   (SELECT id FROM `USER`);

【讨论】:

对不起,不好的解决方案,也是错误的。如果有的话,那就是...NOT IN (SELECT id FROM user); SELECT GROUP_CONCAT(id SEPARATOR ',') AS idList FROM USER 这个查询给出了 id 的字符串 (1,2,3....) @tombom 谢谢,我更正了,你知道为什么我不能使用这个查询吗? 你可以使用它,但它比我的慢。【参考方案2】:

最快的方法是做一个左连接,看看哪个条目在另一个表中没有对应的行。

DELETE FROM 
blogs
LEFT JOIN users ON blogs.id = users.id
WHERE users.id IS NULL;

可以使用与您的语法接近的另一种语法,但它的性能不高,因为对于 blogs 表中的每一行,都会读取整个 users 表(假设没有索引)。

【讨论】:

以上是关于删除不同表中的条目 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:删除行中的重复条目不起作用

如何删除辅助表中的条目

查询更新和删除两个不同表中的记录

如何删除 MySQL 表中的重复项

怎样删除mysql一个表中的全部数据

在MySql中的每个新用户之后计算表中的行/条目