我想知道是否可以引用外部范围中定义的名称。虽然以下查询按预期工作,但我找不到任何关于范围确切如何工作的官方文档。
以下是一个示例查询:
select Calendar.WorkerNumber
from Calendar, Activities
where Calendar.IdA = Activities.IdA and
Activities.RequestedJob not in (
select Jobs.Job
from Jobs
-- Here I am referencing Calendar.WorkerNumber which is defined in the outer scope
where Jobs.WorkerNumber = Calendar.WorkerNumber
)
答案 0 :(得分:1)
您应该使用JOIN
语法:
select Calendar.WorkerNumber
from Calendar
join Activities
on Calendar.IdA = Activities.IdA
where Activities.RequestedJob not in (
select Jobs.Job
from Jobs
where Jobs.WorkerNumber = Calendar.WorkerNumber
);
这是correlated subquery
的典型例子:
在包含相关子查询的查询中(也称为 重复子查询),子查询依赖于它的外部查询 值。这意味着子查询重复执行一次 外部查询可能选择的每一行。
从子查询中,您可以引用外部对象,但反之亦然。如果您使用相同的表两次(outerquery / subquery,则需要使用别名)。
SELECT *
FROM tab t1
WHERE ID NOT IN (SELECT t2.ID
FROM tab t2
WHERE t1.colx > t2.colx)