当我遇到这个答案时,我正在寻找更新使用多个查询和使用案例。 SQL Statement with multiple SETs and WHEREs
我发现了这个答案,不建议这样做。
UPDATE table
SET ID = CASE WHEN ID = 2555 THEN 111111259
WHEN ID =2724 THEN 111111261
WHEN ID = 2021 THEN 111111263
WHEN ID = 2017 THEN 111111264
END
WHERE ID IN (2555,2724,2021,2017)
为什么不推荐这个?不是更好,因为您只是通过一次表而不是多次查询多次。特别是在一张大桌子里?
答案 0 :(得分:0)
就性能而言,它不太可能有所作为。昂贵的部分是IN
条款,根据我的经验,这并不比多个WHERE
条款快。它可能更慢 - 因为除了找到要操作的行之外,它还必须选择哪个行来更新哪个设置。
不建议这样做的主要原因是因为查询会重复,因此会冒犯DRY principle。您正在重复要影响的行的ID,因此您将邀请错误。
你能发现这个版本的查询有什么问题吗?
UPDATE table
SET ID = CASE WHEN ID = 2555 THEN 111111259
WHEN ID =2724 THEN 111111261
WHEN ID = 2021 THEN 111111263
WHEN ID = 2017 THEN 111111264
END
WHERE ID IN (2555,2724,2021,2071)
(提示:2017年和2071年)。
如果查询更复杂,有更多WHERE子句 - 你只得到" 3行受影响"因为其中一个条款没有匹配,或者是因为你的ID错了?