为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2019-10-25 13:14:21
我试图了解如何用不同的值更新多行,但我不明白。解决方案无处不在,但对我来说似乎很难理解。例如,将三个更新更新为1个查询:UPDATE table_usersSET cod_user = '622057'    , date = '12082014'WHERE user_rol = 'student'    AND cod_office = '17389551'; UPDATE table_usersSET cod_user = '2913659'    , date = '12082014'WHERE user_rol = 'assistant'    AND cod_office = '17389551'; UPDATE table_usersSET cod_user = '6160230'    , date = '12082014'WHERE user_rol = 'admin'    AND cod_office = '17389551'; 我读了一个例子,但我真的不明白如何进行查询。即:UPDATE table_to_updateSET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')    ,date = IF(cod_office = '17389551','12082014')WHERE ?? IN (??) ;如果在WHERE和IF条件中存在多个条件,我还不太清楚如何执行查询。
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以这样操作:


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';

我不了解您的日期格式。日期应使用本机日期和时间类型存储在数据库中。


查看完整回答
反对 回复 2019-10-25
?
慕容森

TA贡献1853条经验 获得超18个赞

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列表中。如果它们都不是主键(这似乎不太可能),则此方法将始终创建新记录-可能不是想要的。


但是,这种方法使准备好的语句更易于构建和更加简洁。


查看完整回答
反对 回复 2019-10-25
?
烙印99

TA贡献1829条经验 获得超13个赞

您可以使用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';


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 776 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信