使用子查询更新

问题描述 投票:0回答:1

我正在使用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;

错误:

ERROR:  syntax error at or near "SELECT"
LIGNE 3 :                     (SELECT 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兼容

感谢帮助

postgresql sql-update subquery postgresql-9.3
1个回答
0
投票

终于解决了:

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;
© www.soinside.com 2019 - 2024. All rights reserved.