MySQL-在一个查询中更新具有不同值的多行

我试图了解如何用不同的值更新多行,但我不明白。解决方案无处不在,但对我来说似乎很难理解。


例如,将三个更新更新为1个查询:


UPDATE table_users

SET cod_user = '622057'

    , date = '12082014'

WHERE user_rol = 'student'

    AND cod_office = '17389551'; 


UPDATE table_users

SET cod_user = '2913659'

    , date = '12082014'

WHERE user_rol = 'assistant'

    AND cod_office = '17389551'; 


UPDATE table_users

SET cod_user = '6160230'

    , date = '12082014'

WHERE user_rol = 'admin'

    AND cod_office = '17389551'; 

我读了一个例子,但我真的不明白如何进行查询。即:


UPDATE table_to_update

SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')

    ,date = IF(cod_office = '17389551','12082014')

WHERE ?? IN (??) ;

如果在WHERE和IF条件中存在多个条件,我还不太清楚如何执行查询。


德玛西亚99
浏览 777回答 3
3回答

心有法竹

您可以这样操作:UPDATE table_users    SET cod_user = (case when user_role = 'student' then '622057'                         when user_role = 'assistant' then '2913659'                         when user_role = 'admin' then '6160230'                    end),        date = '12082014'    WHERE user_role in ('student', 'assistant', 'admin') AND          cod_office = '17389551';我不了解您的日期格式。日期应使用本机日期和时间类型存储在数据库中。

慕容森

MySQL提供了一种更具可读性的方法,可以将多个更新组合到一个查询中。这似乎更适合您描述的场景,更容易阅读,并且避免了那些难以解开的多重条件。INSERT INTO table_users (cod_user, date, user_rol, cod_office)VALUES('622057', '12082014', 'student', '17389551'),('2913659', '12082014', 'assistant','17389551'),('6160230', '12082014', 'admin', '17389551')ON DUPLICATE KEY UPDATE cod_user=VALUES(cod_user), date=VALUES(date)假定user_rol, cod_office组合是主键。如果其中只有一个是PK,则将另一个字段添加到UPDATE列表中。如果它们都不是主键(这似乎不太可能),则此方法将始终创建新记录-可能不是想要的。但是,这种方法使准备好的语句更易于构建和更加简洁。

烙印99

您可以使用CASE语句来处理多个if / then方案:UPDATE table_to_update SET  cod_user= CASE WHEN user_rol = 'student' THEN '622057'                   WHEN user_rol = 'assistant' THEN '2913659'                   WHEN user_rol = 'admin' THEN '6160230'               END    ,date = '12082014'WHERE user_rol IN ('student','assistant','admin')  AND cod_office = '17389551';
打开App,查看更多内容
随时随地看视频慕课网APP