2014-02-18 28 views
3

在PostgreSQL使用使用RECURSIVE WITH的内侧,带可以由另一个与其一起使用,例如:PostgreSQL中

WITH num AS (
    VALUES (50) 
), num2 AS (
    SELECT column1 * 2 AS value FROM num 
) 
SELECT value FROM num2; 

再就是RECURSIVE WITHs,其可以像这样进行:

WITH RECURSIVE t(n) AS (
    VALUES (1) 
    UNION ALL 
    SELECT n+1 FROM t WHERE n < 100 
) 
SELECT sum(n) FROM t; 

但是到目前为止,我还没有找到使用先前WITH的RECURSIVE WITH的方法。我会认为它应该是这样的:

WITH num AS (
    VALUES (50) 
), num2 AS (
    SELECT column1 * 2 AS value FROM num 
), RECURSIVE t(n) AS (
     VALUES (1) 
    UNION ALL 
     SELECT n+1 FROM t WHERE n < (SELECT * FROM num2) 
) 
SELECT sum(n) FROM t; 

但这不起作用。那么有没有办法做到这一点?如果是这样,怎么样?

回答

3

开始于WITH RECURSIVE。您仍然可以递归部分之前挤进“正规”的热膨胀系数:

WITH RECURSIVE 
    num AS (VALUES (50)) 
, num2 AS (SELECT column1 * 2 AS value FROM num) 
, t(n) AS (
     VALUES (1) 
     UNION ALL 
     SELECT n+1 FROM t WHERE n < (SELECT * FROM num2) 
    ) 
SELECT sum(n) FROM t; 

-> SQLfiddle demo.