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