postgresql中嵌套的with子句

postgresql中嵌套的with子句,postgresql,Postgresql,我正在尝试将嵌套的与一起使用: CREATE TABLE audit_trail ( old_email TEXT NOT NULL, new_email TEXT NOT NULL ); INSERT INTO audit_trail(old_email, new_email) VALUES ('harold_gim@yahoo.com', 'hgimenez@hotmail.com'), ('hgimenez@hotmail.com', 'ha

我正在尝试将嵌套的
一起使用:

CREATE TABLE audit_trail (
      old_email TEXT NOT NULL,
      new_email TEXT NOT NULL
);

INSERT INTO audit_trail(old_email, new_email)
  VALUES ('harold_gim@yahoo.com', 'hgimenez@hotmail.com'),
         ('hgimenez@hotmail.com', 'harold.gimenez@gmail.com'),
         ('harold.gimenez@gmail.com', 'harold@heroku.com'),
         ('foo@bar.com', 'bar@baz.com'),
         ('bar@baz.com', 'barbaz@gmail.com');

with iter2 as (
    with iter1 as (
        select old_email, new_email from audit_trail where old_email = 'harold_gim@yahoo.com'
        ) select a.old_email, a.new_email from audit_trail a join iter1 b on (a.old_email = b.new_email)
) select * from iter1 union iter2;
我得到了这个错误:

ERROR:  syntax error at or near "iter2" at character 264
STATEMENT:  with iter2 as (
        with iter1 as (
            select old_email, new_email from audit_trail where old_email = 'harold_gim@yahoo.com'
            ) select a.old_email, a.new_email from audit_trail a join iter1 b on (a.old_email = b.new_email)
    ) select * from iter1 union iter2;
ERROR:  syntax error at or near "iter2"
LINE 5: ) select * from iter1 union iter2;
显然是语法错误。是否支持嵌套


PostgreSQL 9.4.4版

错误消息涉及正确的
联合
语法,应该是

...
select * from iter1 
union 
select * from iter2;
然而,在这种情况下,您将得到错误

ERROR:  relation "iter1" does not exist
LINE 6: select * from iter1 
因为可以使用嵌套的
with
语句,但在内部查询中定义的表在外部查询外不可见。使用查询列表:

with iter1 as (
    select old_email, new_email 
    from audit_trail 
    where old_email = 'harold_gim@yahoo.com'
    ),
iter2 as (
    select a.old_email, a.new_email 
    from audit_trail a 
    join iter1 b on (a.old_email = b.new_email)
    )
select * from iter1 
union 
select * from iter2;