2017-06-02 3 views
0

from句で再帰CTEを使用しようとしています。DB2サブクエリのCTE

with i (i) as ( 
    values (1) 
    union all 
    select i + 1 from i 
    where i < 3 
) 
select * from i; 

      I 
------------- 
      1 
      2 
      3 

しかし、私はfrom句でそれをしようとすると:このCTEは、それ自体で動作します

select * 
from (
    with i (i) as ( 
     values (1) 
     union all 
     select i + 1 from i 
     where i < 3 
    ) 
    select * from i 
) i; 
ERRO próximo da linha 1: 
SQL0104N An unexpected token "as" was found following "* 
from (
with i (i)". Expected tokens may include: "JOIN". 

同様の構築物はPostgreSQLで動作します。私は何が欠けていますか? DB2照会の最初の文でなければならない「と」

+0

なぜあなたは 'FROM'句でCTEが必要なのですかみては?私にはX-Yの問題のように見えます。ご覧のとおり、DB2では構文的に正しくありません(意味的には不要です)。 – mustaccio

+0

@mustaccioまた、選択リスト内の相関サブクエリかもしれませんが、私はそれが横方向結合でよりきれいになると思いました。相関サブクエリは今はテストできません。それは合法ですか? –

答えて

1

こんにちは、これは

with i (i) as (
    values (1) 
    union all 
    select i + 1 from i 
    where i < 3 
) 
select * 
    from (

      select * from i 
     ) i;