我正在将我们的后端数据库从 mysql 移动到 postgres,并且正在迁移我们所有的旧查询/函数。他们中的大多数都是微不足道的,但今天我遇到了一个让我摸不着头脑的东西。这里是:
UPDATE
k_coderound AS cr, k_coderound AS cr_m
SET
cr.is_correct = IF(
(SELECT GROUP_CONCAT(option_id ORDER BY variable_id) AS `values` FROM k_value
WHERE code_round_id=cr.id GROUP BY code_round_id) =
(SELECT GROUP_CONCAT(option_id ORDER BY variable_id) AS `values` FROM k_value
WHERE code_round_id=cr_m.id GROUP BY code_round_id),
1,
0
)
WHERE
cr.is_master=0
AND cr_m.is_master=1
AND cr_m.object_id=cr.object_id
AND cr_m.content_type_id =cr.content_type_id
我知道 Postgres 没有 group_concat,应该使用 array_agg。我的问题是我无法弄清楚到底发生了什么——这个查询是很久以前由一个不再和我们在一起的人写的。Postgres 中缺少 IF 语句也使这一困难更加复杂。如果有人能够提供反馈或建议,我将不胜感激!