0

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

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

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

我想仅当 D1 为 BBB 时将 D1 设置为 AAA,仅当 D2 为 BBB 时才将 D2 设置为 AAA。

4

3 回答 3

3

这是您可以在一个语句中执行此操作的最有效方法:

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

为了获得最佳性能,请确保在D1和上有单独的索引D2。在这种情况下,查询规划器可以进行索引合并。不要只使用多列索引,否则查询规划器将不得不依赖表扫描。

于 2012-07-18T22:31:17.870 回答
1

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

UPDATE items
SET
  D1 = IF(D1 = 'BBB', 'AAA', D1),
  D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE
  D1 = 'BBB' OR
  D2 = 'BBB'
于 2012-07-18T22:33:30.880 回答
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'
于 2012-07-18T22:29:56.233 回答