繁体   English   中英

SQL-存在不相等的EXISTS和NOT EXISTS

[英]SQL - EXISTS and NOT EXISTS with inequality

考虑具有以下选项卡

考虑拥有这两个表和以下查询:

SELECT Product. *
FROM Product
WHERE EXISTS 
       ( SELECT *
         FROM Codes
         WHERE  Product.P_code <> Codes.P_code)

SELECT Product. *
FROM Product
WHERE NOT EXISTS 
       ( SELECT *
         FROM Codes
         WHERE  Product.P_code <> Codes.P_code)

以下推理正确吗?

1,第一个查询将产生两个条目,因为Code中有两个P_code行与Product中的不相同。 2.子查询将返回两个条目,但是它们将被主查询中的NOT条件消除,这将返回零行。

我不确定这些查询中的推理如何工作。 我可以轻松预测查询何时将输出2或3行,但是我不知道查询可能会打印0或5行的情况下的工作方式(取决于EXISTS / NOT EXISTS条件和等号/不等号) 。

有人可以详细说明一下还是给我很好的阅读? 谢谢!

您的推理不正确。 但是,这很容易验证,因此您应该自己运行查询。

第一个查询将返回Product所有行。 为什么? 因为对于每个代码,不等式为true的Codes中至少有一行。 例如,代码'P_01''P_03'不匹配,因此存在不匹配的代码。

第二个查询将在Product不返回任何行。 为什么? 因为每个产品代码都有一个不匹配的代码。 因为存在这样的代码,所以not exists失败。

我建议您在existsnot exists陈述中坚持平等条件。 逻辑更容易遵循,更不容易出错。

如果内部查询返回至少一条记录,则EXISTS返回TRUE。

因此,在第一个查询中,EXISTS对所有产品返回TRUE,因为CODES中至少有一个记录与PRODUCT中的产品代码不匹配。

下面给出了一个简单的可视化。

在此处输入图片说明

相反,如果内部查询没有返回行,则NO EXISTS返回TRUE。 在上面的示例中,Inn没有这种情况,并且什么也不返回。

甲骨文的参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM