首頁  >  文章  >  資料庫  >  如何使用 CASE 語句有效地用新值更新 MySQL 條目?

如何使用 CASE 語句有效地用新值更新 MySQL 條目?

Barbara Streisand
Barbara Streisand原創
2024-11-11 07:55:03563瀏覽

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

使用 CASE 更新 MySQL 條目以獲得新值

本文解決了基於 MySQL 資料庫中的 ID 大規模更新清單價格的挑戰。嘗試此操作時遇到的常見問題是使用 CASE 語句,如果使用不當,可能會導致意外結果。

問題中提供的查詢包含一個基本缺陷。它使用 CASE 語句來設定 Price 列,但沒有明確指定 ID 未包含在 WHEN 子句中的記錄的值。因此,這些記錄將會更新為 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 根據 ID 將 ae44 表中的記錄與子查詢中的記錄進行比對。只有具有匹配 ID 的記錄的價格才會更新為對應的新值,所有其他記錄保持不變。

以上是如何使用 CASE 語句有效地用新值更新 MySQL 條目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn