使用多个查询与案例建议进行更新

时间:2017-07-19 14:44:03

标签: sql

当我遇到这个答案时,我正在寻找更新使用多个查询和使用案例。 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)

为什么不推荐这个?不是更好,因为您只是通过一次表而不是多次查询多次。特别是在一张大桌子里?

1 个答案:

答案 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错了?