【问题标题】:Is it possible to JOIN with a CTE in PostgreSQL?可以在 PostgreSQL 中加入 CTE 吗?
【发布时间】:2018-06-28 15:04:41
【问题描述】:
我正在尝试编写这样的查询
WITH a AS (SELECT key FROM table)
SELECT *
FROM a
JOIN b;
在 PostgreSQL 10.4 中产生语法错误。
为什么会出现这个错误?
看起来我将创建一个视图。有没有更好的解决方案?
【问题讨论】:
标签:
sql
postgresql
join
common-table-expression
【解决方案1】:
您缺少 JOIN 条件:
WITH a AS (SELECT key FROM table)
SELECT *
FROM a
JOIN b ON a.key = b.key;
【解决方案2】:
问题不是 CTE,而是一个简单的语法错误:
SELECT *
FROM a
JOIN b
-- something missing here
这里,JOIN 默认为 INNER JOIN,这需要一些条件来确定应连接哪些行 - 通常类似于 ON a.key = b.key 或 USING key。 LEFT OUTER JOIN 或 RIGHT OUTER JOIN 也是如此。
如果您想要所有可能的组合(很少见,但偶尔有用),您可以使用CROSS JOIN:
SELECT *
FROM a
CROSS JOIN b;
或类似的逗号运算符:
SELECT *
FROM a, b;