ホームページ >データベース >mysql チュートリアル >CASE ステートメントを使用して MySQL エントリを新しい値で効率的に更新するにはどうすればよいですか?

CASE ステートメントを使用して MySQL エントリを新しい値で効率的に更新するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-11 07:55:03616ブラウズ

How can I efficiently update MySQL entries with new values using the CASE statement?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。