我正在使用一个框架(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?我的另一种选择是破解框架,我不想这么做。
问题是您SET在列中的子句中包含了表别名。请参阅UPDATEPostgres docs中的文档:
SET
UPDATE
column 中的列名称 table 。如果需要,可以使用子字段名称或数组下标来限定列名称。请勿在目标列的规范中包含表名-例如, UPDATE tab SET tab.col = 1 无效。
column
中的列名称 table 。如果需要,可以使用子字段名称或数组下标来限定列名称。请勿在目标列的规范中包含表名-例如, UPDATE tab SET tab.col = 1 无效。
table
UPDATE tab SET tab.col = 1
这在Postgres中有效:
update GREETING Greeting set NAME='World', PHRASE='Hello World!' where Greeting.ID=5 ;