【问题标题】:column "d" of relation "Drawings" does not exist关系“图纸”的“d”列不存在
【发布时间】:2021-06-02 03:34:55
【问题描述】:

我不知道我的查询出了什么问题

UPDATE "Drawings" d SET
    d."IsMostRecent" = TRUE 
FROM (
    select distinct on (a."Code") a."Code", r."Id", a."DrawnAt"
    FROM (
          SELECT r2."Code" as "Code", max(r2."DrawnAt") as "DrawnAt"
          FROM "Drawings" r2
          GROUP BY r2."Code"
    ) a
    INNER JOIN "Drawings" r
    ON r."Code" = a."Code" AND r."DrawnAt" = a."DrawnAt"
    order by a."Code", r."Id" desc 
) AS d2
WHERE 
    d."Id" = d2."Id"
    

抛出的错误:SQL 错误 [42703]:错误:关系“图纸”的“d”列不存在 位置:27

【问题讨论】:

  • 而不是d."IsMostRecent"=true 使用"IsMostRecent" = TRUE。另外强烈建议使用小写字母作为标识符,否则会造成很大的问题
  • @AkhileshMishra 不错。现在效果很好
  • 来自手册:不要在目标列的规范中包含表的名称——例如,UPDATE table_name SET table_name.col = 1 是无效的。 postgresql.org/docs/current/sql-update.html

标签: postgresql


【解决方案1】:

在更新查询中,永远不要使用表别名和set 部分中的列名。你应该写"IsMostRecent"=true而不是d."IsMostRecent" = TRUE

建议:在 postgres 中总是使用小写的标识符。 wiki

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2013-07-17
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多