有没有办法将这两个语句简化为一个?
UPDATE items
SET D1 = 'AAA'
WHERE D1 = 'BBB'
UPDATE items
SET D2 = 'AAA'
WHERE D2 = 'BBB'
我想仅当 D1 为 BBB 时将 D1 设置为 AAA,仅当 D2 为 BBB 时才将 D2 设置为 AAA。
有没有办法将这两个语句简化为一个?
UPDATE items
SET D1 = 'AAA'
WHERE D1 = 'BBB'
UPDATE items
SET D2 = 'AAA'
WHERE D2 = 'BBB'
我想仅当 D1 为 BBB 时将 D1 设置为 AAA,仅当 D2 为 BBB 时才将 D2 设置为 AAA。
这是您可以在一个语句中执行此操作的最有效方法:
UPDATE items
SET D1 = IF(D1 = 'BBB', 'AAA', D1),
D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE D1 = 'BBB' OR D2 = 'BBB';
为了获得最佳性能,请确保在D1
和上有单独的索引D2
。在这种情况下,查询规划器可以进行索引合并。不要只使用多列索引,否则查询规划器将不得不依赖表扫描。
如果行不符合标准,您可以使用 if,并将列设置为 self
UPDATE items
SET
D1 = IF(D1 = 'BBB', 'AAA', D1),
D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE
D1 = 'BBB' OR
D2 = 'BBB'
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'