使用 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中文網其他相關文章!