MySQL如何使用Not Exist在多个表上进行选择

Posted

技术标签:

【中文标题】MySQL如何使用Not Exist在多个表上进行选择【英文标题】:MySQL how to select on multiple tables using Not Exist 【发布时间】:2013-08-09 19:46:16 【问题描述】:

我有三张桌子。一个是删除候选表。该表是根据某些标准创建的,但没有包括几个需要考虑的因素(系统的限制)。考虑到那些“遗漏”的因素,创建了另外两个表。因此,我需要对这三个表运行 SELECT 查询以得出删除列表。

我开始的是:

SELECT inactive.id
FROM inactive, renamed, returned
WHERE NOT EXISTS (inactive.id = remamed.id and inactive.id = returned.id)

但这给了我一个错误。有人可以在这里指出我的错误吗?

谢谢

【问题讨论】:

【参考方案1】:

您在这里尝试做什么并不完全清楚。

我假设您想要 inactive 表中不存在于 renamed 表或 inactive 表中的所有行的列表。对吗?

如果是这样,您可以使用这样的查询:

SELECT inactive.id
FROM inactive
WHERE NOT EXISTS (select null from renamed where renamed.id = inactive.id)
AND NOT EXISTS (select null from returned where returned.id = inactive.id)

【讨论】:

我有三个表,不活动的、重命名的、返回的。我想要一个非活动表中所有行的列表,这些行在重命名的表或返回的表中都不存在。但是,从您的回复中,我想我知道我在哪里犯了两个错误。感谢您的帮助。如果不管,我会回帖。 @nakins 。 . .如果这回答了您的问题,您应该接受答案。 我认为我应该使用 OR 而不是 AND。如果我使用 AND,那么为了选择 inactive.id,它必须不存在于重命名和返回的表中,对吗?但是,如果我使用OR,那么如果重命名的表中不存在inactive.id,是否会继续检查返回的表中是否不存在inactive.id?

以上是关于MySQL如何使用Not Exist在多个表上进行选择的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Datetime 中使用 NOT IN 或 Not Exist 自定义?

MySQL:在具有多个外键依赖项的表上进行更新

如何在同一张表上进行多个连接,然后与另一个表连接?

带有子查询的 CTE 查询在小型索引表上很慢;如何在 MySQL 上进行优化?

MySQL-视图上进行增删改查

in exist,not in ,not exist