2

次の質問( 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 を参照していますか?

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 に答える