나는 우리의 백엔드 데이터베이스를 mysql에서 postgres로 옮기고 모든 이전 쿼리/함수를 마이그레이션하는 과정에있다. 그들 중 대부분은 하찮은 일이지만 오늘 나는 내 머리를 긁적 게하는 것을 가로 질렀다. 여기에 있습니다 :이상한 MySQL 쿼리를 group_concat을 사용하는 Postgresql로 바꾸기
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 문이 없다는 것입니다. 누구든지 의견이나 조언을 제공 할 수 있다면 크게 감사하겠습니다.
'option_id','variable_id' 및'code_round_id' 열이 속한 테이블을 제공 할 수 있습니까? 그것들은'k_value'에 속해 있습니까? –
option_id, variable_id 및 code_round_id가 k_value에 속합니다. –
IF는 일반적으로 PostgreSQL (및 기타 표준 호환 SQL 데이터베이스)의 CASE로 변환됩니다. –