有没有办法将这两个语句简化为一个?
UPDATE items
SET D1 = 'AAA'
WHERE D1 = 'BBB'
UPDATE items
SET D2 = 'AAA'
WHERE D2 = 'BBB'
我想仅在D1为BBB时将D1设置为AAA,并且仅在D2为BBB时将D2设置为AAA。
答案 0 :(得分:3)
这是在一个声明中最有效的方法:
UPDATE items
SET D1 = IF(D1 = 'BBB', 'AAA', D1),
D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE D1 = 'BBB' OR D2 = 'BBB';
为获得最佳效果,请确保在D1
和D2
上有单独的索引。在这种情况下,查询计划程序可以执行索引合并。不要只使用多列索引,否则查询规划器必须回退到表扫描。
答案 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'