如何将子查询加入到自身中?我想做类似以下的事情。
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
但是上面的查询给出了错误
Msg 208,Level 16,State 1,Line 1 无效的对象名称为“四”。
我宁愿不必首先将它存储为变量或视图等,因为这是整体查询的一部分(这本身就是一个子查询,它是一系列UNIONS
的一部分)我不知道我希望确保其他地方没有影响联接。
此更改背后的推动力是four
曾经是一个简单的查找,但现在对于此查询,必须计算值。
PS - 这是一个简化示例,在我的情况下,four
的子查询是一百行
答案 0 :(得分:3)
您可以在此方案中使用CTE。在这里,您无需将此结果存储在任何临时对象中。
;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
答案 1 :(得分:0)
你需要再写一次。你别名四个'只能在'选择','其他','有','开&等等中调用。只有条件而不是连接中的表,除非它本身就是一个表名
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
(SELECT 1 AS src, 2 as dest union all select 2, 3 ) AS f
ON f.src = four.dest
答案 2 :(得分:0)
使用临时表。
Declare @Temp(src int, desc int);
INSERT INTO @Temp(src,desc)
VALUES
(SELECT 1 AS src, 2 as dest union all select 2, 3)
SELECT * FROM @Temp t1
INNER JOIN @Temp t2 ON t1.src = t2.dest