MySQL从2列更新两行

时间:2012-07-18 22:25:48

标签: mysql

有没有办法将这两个语句简化为一个?

UPDATE items
SET D1 = 'AAA'
WHERE D1 = 'BBB'

UPDATE items
SET D2 = 'AAA'
WHERE D2 = 'BBB'

我想仅在D1为BBB时将D1设置为AAA,并且仅在D2为BBB时将D2设置为AAA。

3 个答案:

答案 0 :(得分:3)

这是在一个声明中最有效的方法:

UPDATE items
SET D1 = IF(D1 = 'BBB', 'AAA', D1),
    D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE D1 = 'BBB' OR D2 = 'BBB';

为获得最佳效果,请确保在D1D2上有单独的索引。在这种情况下,查询计划程序可以执行索引合并。不要只使用多列索引,否则查询规划器必须回退到表扫描。

答案 1 :(得分:1)

如果行不符合标准,您可以使用if,并将列设置为自身

UPDATE items
SET
  D1 = IF(D1 = 'BBB', 'AAA', D1),
  D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE
  D1 = 'BBB' OR
  D2 = 'BBB'

答案 2 :(得分:0)

UPDATE items SET D1 = 'AAA', SET D2 = 'AAA' WHERE D1 = 'BBB' AND D2 = 'BBB'

或取决于您想要达到的目标:

UPDATE items SET D1 = 'AAA', SET D2 = 'AAA' WHERE D1 = 'BBB' OR D2 = 'BBB'