これらの 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 に設定したい。
これらの 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 に設定したい。
これは、これを 1 つのステートメントで実行できる最も効率的な方法です。
UPDATE items
SET D1 = IF(D1 = 'BBB', 'AAA', D1),
D2 = IF(D2 = 'BBB', 'AAA', D2)
WHERE D1 = 'BBB' OR D2 = 'BBB';
D1
最適なパフォーマンスを得るには、とに個別のインデックスがあることを確認してくださいD2
。この場合、クエリ プランナーはインデックス マージを実行できます。複数列インデックスのみを使用しないでください。そうしないと、クエリ プランナーがテーブル スキャンにフォールバックする必要があります。
行が基準を満たさない場合は、if を使用して、列を自分自身に設定することができます
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'