一尘不染

Postgres将不接受列名之前的表别名

sql

我正在使用一个框架(Jodd),该框架将表别名添加到SQL Select的列名称中。它看起来像格式正确的SQL,但Postgres对此感到窒息。

update GREETING Greeting 
     set Greeting.ID=5, 
         Greeting.NAME='World', 
         Greeting.PHRASE='Hello World!'  
where (Greeting.ID=5)

给出一个错误:

Error: ERROR: column "greeting" of relation "greeting" does not exist
SQLState:  42703

有没有办法让Postgres接受该SQL?我的另一种选择是破解框架,我不想这么做。


阅读 220

收藏
2021-03-10

共1个答案

一尘不染

问题是您SET在列中的子句中包含了表别名。请参阅UPDATEPostgres
docs中的文档

column

中的列名称 table 。如果需要,可以使用子字段名称或数组下标来限定列名称。请勿在目标列的规范中包含表名-例如, UPDATE tab SET tab.col = 1 无效。

这在Postgres中有效:

update GREETING Greeting 
set 
    NAME='World', 
    PHRASE='Hello World!' 
where Greeting.ID=5 ;
2021-03-10