You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL的EXISTS运算符为何将主查询行而非全表传递给子查询?

关联子查询中EXISTS运算符的执行逻辑疑问

我在w3school学习SQL,目前学到EXISTS运算符章节,同时也在参考Stack Overflow上的相关讨论帖子。

我目前使用的示例代码如下:

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);

我知道WHERE子句会逐行校验条件,但如果单独运行子查询部分会出现报错,单独执行的子查询代码如下:

SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20)

报错内容为:Suppliers未定义。

我无法理解的点是:为什么子查询仅使用主查询中Suppliers表的单行数据?这个逻辑本身是通顺的,因为如果子查询使用整个Suppliers表,条件会始终返回真,最终会返回所有供应商,哪怕对应产品的Price大于20。

我参考的Stack Overflow回答提到:

外层查询和子查询的关联逻辑在于,每校验一行数据,Supplier_id就会从外层查询传递到子查询中。

因此我希望能获得任意SQL语言的官方参考资料,明确说明「关联子查询不会使用整个外层表,仅使用主查询当前正在筛选的特定行数据」的规则。


内容的提问来源于stack exchange,提问作者user31782

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:54:03