sql - tipos - Postgres no aceptará el alias de la tabla antes del nombre de la columna
poner nombre a una consulta en sql (3)
Consulte la documentación en la instrucción UPDATE
, específicamente para la parte de la columna : es ilegal prefijar columnas con alias de tabla en la cláusula SET
.
UPDATE GREETING Greeting
SET ID=5, NAME=''World'', PHRASE=''Hello World!''
WHERE (Greeting.ID=5);
Estoy usando un marco (Jodd) que agrega el alias de tabla a los nombres de columna en una Selección SQL. Parece un SQL bien formado, pero Postgres se ahoga con eso.
update GREETING Greeting
set Greeting.ID=5,
Greeting.NAME=''World'',
Greeting.PHRASE=''Hello World!''
where (Greeting.ID=5)
da un error:
Error: ERROR: column "greeting" of relation "greeting" does not exist
SQLState: 42703
¿Hay alguna manera de hacer que Postgres acepte ese SQL? Mi otra alternativa es hackear el framework, lo que no quiero hacer.
El problema es que incluye el alias de la tabla en la cláusula SET
, en las columnas. Vea la documentación de UPDATE
en los documentos de Postgres :
column
El nombre de una columna en la
table
. El nombre de la columna se puede calificar con un nombre de subcampo o subíndice de matriz, si es necesario. No incluya el nombre de la tabla en la especificación de una columna de destino; por ejemplo, laUPDATE tab SET tab.col = 1
no es válida.
Esto es válido en Postgres:
update GREETING Greeting
set
NAME=''World'',
PHRASE=''Hello World!''
where Greeting.ID=5 ;
Trate de usar el último Jodd, v3.3.7. donde este problema es arreglado
El problema estaba en la biblioteca Jodd: los métodos de actualización de la entidad generaban una instrucción de actualización con alias de tablas. La nueva versión simplemente no pone alias de tabla; Eso funciona para Postgres y para otras bases de datos también.