删除不同表中的条目 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 查询的主要内容,如果未能解决你的问题,请参考以下文章