如何将子查询加入自身?

Sle*_*led 2 sql t-sql sql-server subquery

如何将子查询连接到自身上?我想做类似以下的事情。

SELECT 
    four.src AS start, four.dest AS layover, f.dest AS destination
FROM 
    ( SELECT 1 AS src, 2 as dest union all select 2, 3 ) AS four
JOIN
    four AS f 
ON f.src = four.dest 
Run Code Online (Sandbox Code Playgroud)

但是上面的查询给了我错误

消息 208,级别 16,状态 1,第 1 行 无效的对象名称“四”。

我宁愿不必首先将它存储为变量或视图等,因为这是整体查询的一部分(这本身就是一个子查询及其一系列 的一部分UNIONS),而且我不想确保没有影响其他相关的连接。

这种变化背后的力量four曾经是一个简单的查找,但现在对于这个查询,必须计算值。


PS - 这是一个简化的例子,在我的情况下,子查询four是一百行长

Sha*_*rza 6

您可以使用CTE(本场景中的Common Table Expression。这里,您不需要将此结果存储在任何临时对象中。

;WITH four AS (
SELECT 1 AS src, 2 as dest 
union all 
select 2, 3
)

SELECT F1.src AS start, F1.dest AS layover, f2.dest AS destination
FROM four F1
INNER JOIN four F2 ON F1.src = F2.dest 
Run Code Online (Sandbox Code Playgroud)