Postgres不会在列名前接受表别名

Ron*_*ero 25 sql postgresql jodd

我正在使用一个框架(Jodd),它将表别名添加到SQL Select中的列名.它看起来像格式良好的SQL,但Postgres扼杀了它.

update GREETING Greeting 
     set Greeting.ID=5, 
         Greeting.NAME='World', 
         Greeting.PHRASE='Hello World!'  
where (Greeting.ID=5)
Run Code Online (Sandbox Code Playgroud)

给出错误:

Error: ERROR: column "greeting" of relation "greeting" does not exist
SQLState:  42703
Run Code Online (Sandbox Code Playgroud)

有没有办法让Postgres接受SQL?我的另一个选择是破解框架,我不想这样做.

ype*_*eᵀᴹ 39

问题是您SET在列中包含表别名in 子句.请参阅UPDATEPostgres文档中的文档:

column

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

这在Postgres中有效:

update GREETING Greeting 
set 
    NAME='World', 
    PHRASE='Hello World!' 
where Greeting.ID=5 ;
Run Code Online (Sandbox Code Playgroud)


vye*_*rov 5

检查有关UPDATE语句的文档,特别是针对部分的文档:在SET子句中为表前缀添加列是非法的。

UPDATE GREETING Greeting
   SET ID=5, NAME='World', PHRASE='Hello World!'
 WHERE (Greeting.ID=5);
Run Code Online (Sandbox Code Playgroud)


igr*_*igr 4

尝试使用最新的 Jodd v3.3.7。此问题已解决。

问题出在 Jodd 库中:实体更新方法正在生成带有表别名的更新语句。新版本根本就不放表别名;这适用于 Postgres 和其他数据库。