使用多个值和多个条件mysql更新多行

时间:2011-12-05 16:02:01

标签: mysql

我正面临着SQL查询的复杂情况。任务是更新多个行,具有多个值和多个条件。以下是我想要更新的数据; 要更新的字段:'sales',条件字段:'campid'和'date':

if campid = 259 and date = 22/6/2011 then set sales = $200
else if campid = 259 and date = 21/6/2011 then set sales = $210
else if campid = 260 and date = 22/6/2011 then set sales = $140
else if campid = 260 and date = 21/6/2011 then set sales = $150

我想在一个查询中更新所有这些内容。

3 个答案:

答案 0 :(得分:21)

试试这个:

UPDATE your_table SET sales = 
CASE 
    WHEN campid = 259 AND date = 22/6/2011 THEN 200
    WHEN campid = 259 AND date = 21/6/2011 THEN 210
    WHEN campid = 259 AND date = 22/6/2011 THEN 140
    WHEN campid = 259 AND date = 21/6/2011 THEN 150
    ELSE sales
END

当然我不知道日期字段是DATE还是DATETIME,所以我留下查询显示你可以做什么,但也许你必须根据数据类型修复日期比较。 如果日期字段是DATE(应该如此),您可以写AND date = '2011-06-22',依此类推 注意ELSE条件:必须避免不落入其他情况的记录将被设置为NULL。

答案 1 :(得分:1)

您当然不应该在一个查询中执行这些操作。相反,如果您的目标是同时以原子方式更新它们,则应在单个事务中发出多个UPDATE语句。

您没有说明您使用的是哪个MySQL版本,也没有说明哪个存储引擎。假设InnoDB - 这是MySQL最新版本的标准,通常应该用于事务系统 - 并且假设您是从命令行客户端执行此操作,那么

mysql> set autocommit=0;
mysql> UPDATE ....;
mysql> UPDATE ....;
mysql> ...
mysql> commit;

如果您愿意,可以通过重复第一行重新启用自动提交,但值为1

mysql> set autocommit=1;

答案 2 :(得分:1)

我认为你最好花时间编写一个数据访问对象,以便在每个记录的基础上处理这些相当简单的操作,而不是编写一个过于复杂和耗时的sql查询。这使得以后维护代码,以及使用数据访问对象开发新代码比一次性使用复杂的SQL查询要容易得多。