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;