使用PostgreSQL中的子查询进行更新不起作用

使用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

我使用的是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 
          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,我同意,但现在不可能,我已经用语法中的更新集重写了,谢谢