【问题标题】:WITH statement not working in PostgresqlWITH 语句在 Postgresql 中不起作用
【发布时间】:2012-05-10 15:07:17
【问题描述】:

我有以下在 PgAdmin 中运行的 SQL 查询:

WITH TABLE1 AS
( SELECT int1, int2, int3 FROM atbl
)
SELECT int1, <complex computation involving a large number of values of int2 and int3 from TABLE1>
FROM TABLE1

运行的结果是报错:

ERROR:  syntax error at or near "WITH"
LINE 1: WITH TABLE1 AS

为什么会这样? with 语句应该可用于 PostgreSQL:

http://www.postgresql.org/docs/8.4/static/queries-with.html

据了解,此版本低于8.4。是否有替代使用 WITH 来获得相同结果的替代方法?

【问题讨论】:

  • 我不能说 PostgreSQL,但我知道如果前面的语句没有以分号结束,SQL Server 会感到困惑。您的查询是大批量的一部分吗?
  • 当您链接到 8.4 文档时,您确实使用 PostgreSQL 8.4,对吗? :)
  • 实际上是 8.1.17 版本。真的没想到这个看来 WITH 语句是在这个版本之后引入的……
  • 没错,WITH 是在 8.4 中引入的。但是你为什么还要使用 8.1 呢?这是生命的尽头,不受支持。
  • 那么有什么可以用来代替 WITH 语句的吗?在第一个查询中的每一行的第二个选择中,我需要进行一些涉及该表中所有数据的计算。我想避免为了实现这一目标而重新进行第一次查询...

标签: sql postgresql


【解决方案1】:

我发现 thisthis 很有帮助。并确保您使用 >= 8.4 的版本,因为那是引入此功能的时候。没有 ;应该不是问题。

虽然你的语法看起来是正确的......这绝对有效。

WITH table1 AS (
SELECT * FROM atbl
)
select * from table1

所以我会检查您正在运行的版本。因为这会导致您遇到的错误。

【讨论】:

  • 不是真的......我仍然需要弄清楚如何在不使用 WITH 语句的情况下做到这一点
  • @mstaniloiu,临时表是要走的路。
  • @mstaniloiu,我确实回答了这个问题,这就是为什么它不起作用。是的,临时表将是一个替代方案,但如果可能的话,我会升级。
【解决方案2】:

您可以将其替换为以下内容:

选择 int1, (涉及来自 TABLE1 的大量 int2 和 int3 值的复杂计算) 从 ( 选择 int1、int2、int3 来自 atbl ) 表格1

【讨论】:

    【解决方案3】:

    简单的 SQL 有什么问题?

    SELECT 
      int1, 
      <complex computation involving a large number of values of int2 and int3 from atbl>
    FROM 
      atbl;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2021-11-29
      • 2021-06-16
      • 1970-01-01
      • 2019-07-26
      • 2023-03-15
      相关资源
      最近更新 更多