【发布时间】:2012-06-15 12:52:35
【问题描述】:
我正在将我们的后端数据库从 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 语句也使这一困难更加复杂。如果有人能够提供反馈或建议,我将不胜感激!
【问题讨论】:
-
您能否提供
option_id、variable_id和code_round_id列属于哪个表?他们属于k_value吗? -
option_id、variable_id、code_round_id属于k_value
-
IF通常在 PostgreSQL(以及任何其他符合标准的 SQL 数据库)中转换为CASE
标签: mysql postgresql database-migration group-concat