【问题标题】:postgres WITH query claims no FROM-clausepostgres WITH 查询声明没有 FROM 子句
【发布时间】:2013-09-13 15:27:32
【问题描述】:

我编写了一个使用 WITH 子句的简单查询,但出现此错误:

错误:错误:缺少表“cte”的 FROM 子句条目

这是查询,我清楚地在其中放置了 FROM 子句。我知道这一定很简单,但我只是没有看到我做错了什么。谢谢。

WITH cte AS (
    SELECT cident, "month"
    FROM orders_extended io
    WHERE io.ident = 1    -- 1 will be replaced with a function parameter
)
SELECT *
FROM orders_extended o
WHERE o.cident = cte.cident AND o."month" = cte."month"
ORDER BY o."month" DESC, o.cname

【问题讨论】:

  • 别名cte显然不是在FROM子句中...

标签: postgresql with-statement


【解决方案1】:

消息没有说谎。

WITH cte AS (
    SELECT cident, "month"
    FROM orders_extended io
    WHERE io.ident = 1    -- 1 will be replaced with a function parameter
)
SELECT o.*
FROM orders_extended o
INNER JOIN cte ON (o.cident = cte.cident and o."month" = cte."month")
ORDER BY o."month" DESC, o.cname

【讨论】:

  • 谢谢。我错误地假设使用这样的 WITH 实际上将 cte 放入查询中。没有意识到我需要明确地加入它,当然,一旦我看到它就很有意义。
  • 您不一定需要加入 CTE,您也可以在 WHERE 子句中引用它(类似于您所做的),但通过子查询。例如。 WHERE o.cident = (select cident from cte limit 1).
  • 此答案不完整,可以通过添加对代码如何解决问题的解释来改进。此外,代码示例可以简化为与 op 的原始代码示例不同的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
相关资源
最近更新 更多