【问题标题】:How to execute a PostgreSQL with "WITH" statement? [closed]如何使用“WITH”语句执行 PostgreSQL? [关闭]
【发布时间】:2021-03-23 09:15:55
【问题描述】:

我需要使用 WITH 语句执行查询。如果我运行它,我的 WITH 数据会显示错误。这是我的示例查询,请指导我执行它。

with
x1_fields as
(SELECT
      x1.id as x_id,
      x1.created_time as x_created,
      sum(x1.value) as x_sum

FROM
    xxxx1 x1
    INNER JOIN xxxx2 x2 ON x2.id = x1.id
    INNER JOIN xxxx3 x3 ON x3.id = x2.id
WHERE
     x1.customer = 'microsoft'
GROUP BY
    x1.id,
    x1.created_time
 )
SELECT
  y.id as final_id,
  x_t.sum as final_sum
FROM
    yyyy       as y
    left join x1_fields as x_t on x_t.x_id = y.id
    
where
      y.customer = 'microsoft'
  and y.id = '123456'

我尝试在 DBeaver 中运行此查询,但无法运行。但它适用于 SSRS。我需要在一些 SQL 软件中检查此类查询并对其进行调试。请给我一些指示来解决这个问题。

【问题讨论】:

  • 错误信息是什么意思?
  • x1_fields 不存在。我无法执行查询
  • 好吧,x_t.sum 必须是 x_t.x_sum,因为这是求和结果的别名。但是查询在语法上是正确的,不会导致错误:dbfiddle.uk/… 我假设通过混淆所有内容,您已经消除了问题的实际根本原因。

标签: postgresql common-table-expression dbeaver


【解决方案1】:

由于我们不知道您的数据库和表结构,因此我们找不到可能由于错误的关系名称或其他原因而发生的错误。

但是:语法错误是WITH 子句之后的, 字符(最后的SELECT 之前)。你必须删除它。

【讨论】:

  • 删除了逗号,但我仍然收到 x1_fields not exists 之类的错误
  • 你可以在 WITH 子句中执行 SELECT 没有问题吗?
  • 确实分别执行了查询,两者都运行良好。我在这里提到的查询,它只是一个小代码的示例。我有一个 1989 行的查询,它希望以相同的格式(在单个查询中)执行。我需要相同格式的查询以避免数据库崩溃。
  • 在这种情况下很难确定您的问题。你我你的样品似乎没问题。但是,如前所述,在不了解您的实际表结构的情况下,这在这里不会成功。也许您可以尝试在小提琴中重现您的问题:dbfiddle.uk/?rdbms=postgres_13 但是:2000 行 SQL 代码绝不是一个好兆头。您应该考虑使用事务或后端来分解它。我的经验是:在 2 年内,没有人能够再维护这个查询了。
猜你喜欢
  • 2017-01-31
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多