我正在尝试学习SQL,使用PostgreSQL 9.1.3。我想要理解一些让我觉得不一致的行为。也就是说:
这是可行的:
WITH innermost AS (SELECT 2)
SELECT * FROM innermost
UNION SELECT 3;
我明白了:
?column?
----------
2
3
这是可行的:
WITH outmost AS (
(WITH innermost AS (SELECT 2)
SELECT * FROM innermost)
)
SELECT * FROM outmost;
结果:
?column?
----------
2
这也是可行的:
WITH outmost AS (
SELECT 1
UNION (WITH innermost AS (SELECT 2)
SELECT * FROM innermost)
)
SELECT * FROM outmost;
我明白了:
?column?
----------
1
2
但这不是的工作方式:
WITH outmost AS (
SELECT 1
UNION (WITH innermost as (SELECT 2)
SELECT * FROM innermost
UNION SELECT 3)
)
SELECT * FROM outmost;
结果:
ERROR: relation "innermost" does not exist
LINE 4: SELECT * FROM innermost
在我看来,不是最后一个成功,就是另一个失败。我看不出有什么规律。有没有一些通用规则可以让我预测嵌套CTE和联合的哪些组合可以或不能工作?
https://stackoverflow.com/questions/11741267
复制相似问题