可以在PostgreSQL中加入CTE吗?

可以在PostgreSQL中加入CTE吗?,sql,postgresql,join,common-table-expression,Sql,Postgresql,Join,Common Table Expression,我正试图写一个这样的查询 WITH a AS (SELECT key FROM table) SELECT * FROM a JOIN b; 这会在PostgreSQL 10.4中生成语法错误 为什么会出现这种错误 看起来我将创建一个视图。有更好的解决方案吗?您缺少连接条件: WITH a AS (SELECT key FROM table) SELECT * FROM a JOIN b ON a.key = b.key; 问题不在于CTE,而是一个简单的语法错误: SEL

我正试图写一个这样的查询

WITH a AS (SELECT key FROM table) 
SELECT * 
FROM a 
  JOIN b;
这会在PostgreSQL 10.4中生成语法错误

为什么会出现这种错误


看起来我将创建一个视图。有更好的解决方案吗?

您缺少连接条件:

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

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

SELECT * 
FROM a 
JOIN b
-- something missing here
这里,连接默认为内部连接,这需要一些条件来连接哪些行-通常类似于a.key=b.key或使用key。左外连接或右外连接也是如此

如果希望所有可能的组合都很少见,但偶尔有用,可以使用交叉连接:

或类似的逗号运算符:

SELECT * 
FROM a, b;

您缺少或正在使用的强制联接条件。这很有效,谢谢。
SELECT * 
FROM a, b;