バックエンドデータベースを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ステートメントがないことです。誰かがフィードバックやアドバイスを提供することができれば、私はそれを大いに感謝します!