考虑以下查询。它具有执行特定目的的子查询。然后,此子查询的派生表将在外部应用内部的联接中使用。这样可以正常工作。
但是,如果对注释行取消注释,则会引发错误:“无效的对象名称'SubQuery'”。我觉得这很奇怪,因为在我看来他们取得了相同的结果。
这是怎么回事?为什么我不能以“正常”方式加入派生表?
DECLARE @table1 TABLE (Id int)
DECLARE @table2 TABLE (Id int, ParentId int)
INSERT INTO @table1 VALUES(1), (2), (3)
INSERT INTO @table2 VALUES(2, 1), (3, 2)
SELECT
*
FROM (
SELECT
[Id]
FROM
@table1
) AS [SubQuery]
OUTER APPLY (
SELECT TOP 1
[@table2].[Id]
FROM
@table2
JOIN
@table2 AS [t] ON [@table2].[ParentId] = [SubQuery].[Id]
--JOIN
-- [SubQuery] ON [@table2].[ParentId] = [SubQuery].[Id]
) AS [OuterApply]