Обновление с подзапросом в PostgreSQL не работает - PullRequest
0 голосов
/ 03 февраля 2020

Я использую 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;

Ошибка:

ОШИБКА: синтаксическая ошибка в или около "SELECT "
LIGNE 3: (ВЫБЕРИТЕ convertT.code, convertT.uuid ...

Но если я запусту этот SQL в postgres 9.6, он будет работать нормально:

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?

Спасибо за помощь

1 Ответ

0 голосов
/ 03 февраля 2020

окончательно решено:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...