postgresql - 在 PostgreSQL 中使用子查询更新不起作用
问题描述
我正在使用 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 处或附近的语法错误:(SELECT convertT.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;
推荐阅读
- ms-office - range.formulas 分配未更新 Excel 加载项中的公式栏
- python - Python 模块名称相互矛盾,具体取决于您从何处运行代码
- javascript - 将修改后的数组返回到句子字符串中
- javascript - RxJS“点”与“管道”抽象
- express - Express-browserify 和 Watson Visual Recognition - TypeError: fs.existsSync 不是函数
- angular - Resolver 或 Guard - 更适合使用 ngrx 获取数据
- html - YouTube 嵌入不会在初始加载时自动播放。刷新时自动播放
- java - 在 Java 中使用已排序的数组对 ArrayList 进行排序会得到不同的结果
- javascript - 功能仅在第一次单击时运行?
- node.js - 如何将用户输入作为变量存储在 node.js 的异步函数中