在一个查询中更新多行,两者都有效。
使用WHERE
UPDATE category
SET description = CASE id
WHEN 1 THEN 'good'
WHEN 2 THEN 'bad'
WHEN 3 THEN 'ugly'
END
WHERE id IN (1,2,3)
没有WHERE
UPDATE category
SET description = CASE id
WHEN 1 THEN 'good'
WHEN 2 THEN 'bad'
WHEN 3 THEN 'ugly'
END
但有什么区别? WHEN
是否使用索引?当表变得非常大时,哪种性能更好?
答案 0 :(得分:4)
评论时间有点长。
你的两个问题完全不同。第一个将仅影响具有id
的三个值的行。第二行将影响所有行,为NULL
的任何其他值的行设置描述为id
。为了等效,第二个查询应该是:
UPDATE category
SET description = (CASE id
WHEN 1 THEN 'good'
WHEN 2 THEN 'bad'
WHEN 3 THEN 'ugly'
ELSE description
END);
这两个查询在语义上仍然不同,尽管对数据的影响是相同的。例如,此版本将在所有行上调用update
触发器,而第一个版本仅在符合WHERE
条件的行上调用它。
如果您关心查询的性能和可维护性,则应使用WHERE
条件。