【问题标题】: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 中产生语法错误。

为什么会出现这个错误?

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

【问题讨论】:

  • 您缺少强制连接条件 ONUSING
  • 行得通,谢谢。

标签: 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.keyUSING keyLEFT OUTER JOINRIGHT OUTER JOIN 也是如此。

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

    SELECT * 
    FROM a 
    CROSS JOIN b;
    

    或类似的逗号运算符:

    SELECT * 
    FROM a, b;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2017-03-15
      • 2020-06-08
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      相关资源
      最近更新 更多