扩展以下问题 ( Multiple Select Statement ) 我想知道我是否可以执行以下操作:
WITH
cte1 as (
SELECT * from cdr.Location
),
cte2 as (
SELECT * from cdr.Location
WHERE cdr.Location.someField = cte1.SomeField
)
select * from cte1 union select * from cte2
所以这里的重音在下面一行:
WHERE cdr.Location.someField = cte1.SomeField
我在 cte2 中的哪个位置引用了 cte1?
最佳答案
是的,您可以在后续 CTE 中引用之前声明的 CTE:
WITH cte1 as (
SELECT t.*
FROM cdr.Location t),
cte2 as (
SELECT t.*
FROM cdr.Location t
JOIN cte1 c1 ON c1.somefield = t.someField)
SELECT *
FROM cte1
UNION
SELECT *
FROM cte2
注意事项
- 在 cte1 声明中加入 cte2 是行不通的,因为该语句是自上而下执行的。
- 您可以像任何其他内联 View (它是)或表/临时表/等一样通过 JOINing 引用您需要的任何内容。
顺便说一句:尝试在未来制定一个更好的示例 - 这对您和试图帮助您的 SO 社区的其他成员都有好处。
关于sql - 单个 select 语句中的多个 cte,其中 ctes 可以相互引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641097/