0

これらの 2 つのステートメントを 1 つに簡略化する方法はありますか?

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

これは、これを 1 つのステートメントで実行できる最も効率的な方法です。

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 を使用して、列を自分自身に設定することができます

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 に答える