使用PostgreSQL中的子查询进行更新不起作用
我使用的是Postgresql 9.3,但此SQL不起作用:使用PostgreSQL中的子查询进行更新不起作用,postgresql,sql-update,subquery,postgresql-9.3,Postgresql,Sql Update,Subquery,Postgresql 9.3,我使用的是Postgresql 9.3,但此SQL不起作用: UPDATE revision_table SET (code, uuid, converted_entity1uuid, converted_entity1code) = (SELECT convertedT.code, convertedT.uuid, convertedT.uuid, convertedT.code FROM currency convertedT I
UPDATE revision_table
SET (code, uuid, converted_entity1uuid, converted_entity1code) =
(SELECT convertedT.code, convertedT.uuid, convertedT.uuid, convertedT.code
FROM currency convertedT
INNER JOIN currency_conversion_aud conversionT ON conversionT.currency1_id = convertedT.id
WHERE conversionT.id = 125
ORDER BY rev DESC LIMIT 1),
(converted_entity2uuid, converted_entity2code) =
(SELECT convertedT.uuid, convertedT.code
FROM currency convertedT
INNER JOIN currency_conversion_aud conversionT ON conversionT.currency2_id = convertedT.id
WHERE conversionT.id = 125
ORDER BY rev DESC LIMIT 1)
WHERE id = 12;
错误:
错误:选择位置或附近出现语法错误
LIGNE 3:选择convertedT.code、convertedT.uuid
但如果我在postgres 9.6中运行此SQL,它可以正常工作:
UPDATE revision_table
SET (code, uuid, converted_entity1uuid, converted_entity1code) =
(SELECT convertedT.code, convertedT.uuid, convertedT.uuid, convertedT.code
FROM currency convertedT
INNER JOIN currency_conversion_aud conversionT ON conversionT.currency1_id = convertedT.id
WHERE conversionT.id = 12
ORDER BY rev DESC LIMIT 1),
(converted_entity2uuid, converted_entity2code) =
(SELECT convertedT.uuid, convertedT.code
FROM currency convertedT
INNER JOIN currency_conversion_aud conversionT ON conversionT.currency2_id = convertedT.id
WHERE conversionT.id = 12
ORDER BY rev DESC LIMIT 1)
WHERE id = 12;
UPDATE 0
Temps : 75,359 ms
我如何转换为与9.3兼容,因为9.3中有生产
感谢您的帮助最终解决:
UPDATE
revision_table
SET
code = sub1.code,
uuid = sub1.uuid,
converted_entity1uuid = sub1.uuid,
converted_entity1code = sub1.code,
converted_entity2uuid=sub2.uuid,
converted_entity2code=sub2.code
FROM (
SELECT convertedT.code, convertedT.uuid
FROM currency convertedT
INNER JOIN currency_conversion_aud conversionT
ON conversionT.currency1_id = convertedT.id
WHERE conversionT.id = 12
ORDER BY rev DESC LIMIT 1
) sub1,
(
SELECT convertedT.uuid, convertedT.code
FROM currency convertedT
INNER JOIN currency_conversion_aud conversionT
ON conversionT.currency2_id = convertedT.id
WHERE conversionT.id = 12
ORDER BY rev DESC LIMIT 1
) sub2
WHERE id = 12;
升级到Postgres 9.6,这是最简单的方法。老实说,即使是9.6现在已经有好几年的历史了,而且可能也不会永远得到支持。Postgres 9.3是说你应该尽快计划升级。@TimBiegeleisen:这里记录了它的生命周期:你可以将它重写为更新。。。设置从…起但是你的代码真的很难理解。@TimBiegeleisen,我同意,但现在不可能,我已经用语法中的更新集重写了,谢谢