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)
检查有关UPDATE语句的文档,特别是针对列部分的文档:在SET子句中为表前缀添加列是非法的。
UPDATE GREETING Greeting
SET ID=5, NAME='World', PHRASE='Hello World!'
WHERE (Greeting.ID=5);
Run Code Online (Sandbox Code Playgroud)
尝试使用最新的 Jodd v3.3.7。此问题已解决。
问题出在 Jodd 库中:实体更新方法正在生成带有表别名的更新语句。新版本根本就不放表别名;这适用于 Postgres 和其他数据库。
| 归档时间: |
|
| 查看次数: |
15820 次 |
| 最近记录: |