2

扩展以下问题(多选语句)我想知道我是否可以执行以下操作:

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 ?

4

1 回答 1

9

是的,您可以在后续 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

笔记

  1. 在 cte1 声明中加入 cte2 是行不通的,因为该语句是自上而下执行的。
  2. 您可以像任何其他内联视图(它是)或表/临时表/等一样通过加入您需要的任何内容来引用 CTE。

顺便说一句:试着在未来制定一个更好的例子——这对你和其他试图帮助你的 SO 社区都有好处。

于 2009-10-29T01:22:38.003 回答