可以在PostgreSQL中与CTE联接吗?

时间:2018-06-28 15:04:42

标签: sql postgresql join common-table-expression

我正在尝试编写这样的查询

WITH a AS (SELECT key FROM table) 
SELECT * 
FROM a 
  JOIN b;

这会在PostgreSQL 10.4中生成语法错误。

为什么会出现此错误?

似乎我将创建一个视图。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

您缺少JOIN条件:

WITH a AS (SELECT key FROM table) 
SELECT * 
FROM a 
  JOIN b ON a.key = b.key;

答案 1 :(得分:2)

问题不是CTE,这是一个简单的语法错误:

SELECT * 
FROM a 
JOIN b
-- something missing here

在这里,JOIN默认为INNER JOIN,这要求应结合行的某些条件-通常像ON a.key = b.keyUSING keyLEFT OUTER JOINRIGHT OUTER JOIN也是如此。

如果您想要所有可能的组合(稀有,但偶尔有用),则可以使用CROSS JOIN

SELECT * 
FROM a 
CROSS JOIN b;

或类似的逗号运算符:

SELECT * 
FROM a, b;