在PostgreSQL中是否可以使用CTE进行JOIN操作?

6

我正在尝试编写以下类似的查询

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

这段代码在PostgreSQL 10.4中会生成语法错误。
为什么会出现这个错误呢?
看起来我将创建一个视图来代替。是否有更好的解决方案?

4
你缺少必须的连接条件 ONUSING - Laurenz Albe
2个回答

13

你缺少了连接条件:

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

4
问题不在于CTE,而是一个简单的语法错误:
SELECT * 
FROM a 
JOIN b
-- something missing here

在这里,JOIN默认为内连接,需要一些条件来确定应该连接哪些行 - 通常是像ON a.key = b.keyUSING key。对于LEFT OUTER JOINRIGHT OUTER JOIN也是如此。
如果您想要所有可能的组合(很少见,但偶尔有用),可以使用CROSS JOIN
SELECT * 
FROM a 
CROSS JOIN b;

或者使用类似的逗号运算符:
SELECT * 
FROM a, b;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接