postgresql Postgres 不会在列名之前接受表别名
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11369757/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Postgres won't accept table alias before column name
提问by Ron Romero
I'm using a framework (Jodd) which is adding the table alias to the column names in a SQL Select. It looks like well-formed SQL, but Postgres chokes on it.
我正在使用一个框架 (Jodd),它将表别名添加到 SQL Select 中的列名。它看起来像格式良好的 SQL,但 Postgres 却卡住了它。
update GREETING Greeting
set Greeting.ID=5,
Greeting.NAME='World',
Greeting.PHRASE='Hello World!'
where (Greeting.ID=5)
gives an error:
给出一个错误:
Error: ERROR: column "greeting" of relation "greeting" does not exist
SQLState: 42703
Is there a way to get Postgres to accept that SQL? My other alternative is to hack the framework, which I don't want to do.
有没有办法让 Postgres 接受那个 SQL?我的另一个选择是破解框架,我不想这样做。
回答by ypercube??
The problem is that you include the table alias in SET
clause, in the columns. See the documentation of UPDATE
in Postgres docs:
问题是您SET
在列中包含了表别名 in子句。请参阅UPDATE
Postgres 文档中的文档:
column
The name of a column in
table
. The column name can be qualified with a subfield name or array subscript, if needed. Do not include the table's name in the specification of a target column — for example,UPDATE tab SET tab.col = 1
is invalid.
column
中列的名称
table
。如果需要,可以使用子字段名称或数组下标来限定列名称。不要在目标列的规范中包括表的名称——例如,UPDATE tab SET tab.col = 1
无效。
This is valid in Postgres:
这在 Postgres 中有效:
update GREETING Greeting
set
NAME='World',
PHRASE='Hello World!'
where Greeting.ID=5 ;
回答by vyegorov
回答by igr
Try using the latest Jodd, v3.3.7. where this issue is fixed.
尝试使用最新的 Jodd v3.3.7。修复此问题的地方。
The problem was in the Jodd library: entity update methods were generating update statement with table aliases. The new version simply does not put table aliases; that works for Postgres and for other databases too.
问题出在 Jodd 库中:实体更新方法正在生成带有表别名的更新语句。新版本根本就不放表别名;这也适用于 Postgres 和其他数据库。