我正在尝试编写这样的查询
WITH a AS (SELECT key FROM table)
SELECT *
FROM a
JOIN b;
这会在PostgreSQL 10.4中生成语法错误。
为什么会出现此错误?
似乎我将创建一个视图。有更好的解决方案吗?
答案 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.key
或USING key
。 LEFT OUTER JOIN
或RIGHT OUTER JOIN
也是如此。
如果您想要所有可能的组合(稀有,但偶尔有用),则可以使用CROSS JOIN
:
SELECT *
FROM a
CROSS JOIN b;
或类似的逗号运算符:
SELECT *
FROM a, b;