CASE を使用した新しい値の MySQL エントリの更新
この記事では、MySQL データベースの ID に基づいて出品価格を一括更新するという課題について説明します。これを試みる際に発生する一般的な問題は CASE ステートメントの使用です。これを不適切に使用すると、予期しない結果が生じる可能性があります。
質問で指定されたクエリには根本的な欠陥が含まれています。 CASE ステートメントを使用して Price 列を設定しますが、WHEN 句に含まれていない ID を持つレコードの値は明示的に指定されません。その結果、これらのレコードは NULL 値で更新されます。
これを解決するには、正しいクエリ構造は次のようになります。
UPDATE ae44 SET price = CASE WHEN ID = 'AT259793380' THEN '500' WHEN ID = 'AT271729590' THEN '600' WHEN ID = 'AT275981020' THEN '700' END
ただし、このクエリにはまだ欠点があります。 NULL 値を使用して、WHEN 句にリストされていない ID を持つレコードを更新します。更新を指定された ID のみに制限するには、より選択的なアプローチが必要です。
UPDATE ae44 JOIN ( SELECT 'AT259793380' AS oldval, '500' AS newval UNION ALL SELECT 'AT271729590' AS oldval, '600' AS newval UNION ALL SELECT 'AT275981020' AS oldval, '700' AS newval ) q ON ae44.id = q.oldval SET price = q.newval
このクエリは、サブクエリを利用して、指定された古い値と新しい値を含む一時テーブルを作成します。次に、JOIN を使用して、ae44 テーブル内のレコードとサブクエリ内のレコードを ID に基づいて照合します。一致する ID を持つレコードのみ、価格が対応する新しい値に更新され、他のすべてのレコードは変更されません。
以上がCASE ステートメントを使用して MySQL エントリを新しい値で効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。