2017-07-19 67 views
1

我环顾四周使用多个查询VS,当我遇到这样的回答来使用的情况下更新。 SQL Statement with multiple SETs and WHEREs更新使用多个查询VS情况下建议

,我遇到了这个答案,表示不推荐使用。

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

你确定你想改变你的'ID'列?我假设这是你的'PK'。 –

回答

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行受影响”,因为其他where子句不匹配,或者是因为你的ID有错?