fra*_*a66 118 mysql sql sql-update
我试图了解如何使用不同的值更新多行,我只是不明白.解决方案无处不在,但对我来说,它看起来很难理解.
例如,三个更新为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';
Run Code Online (Sandbox Code Playgroud)
我读了一个例子,但我真的不明白如何进行查询.即:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
Run Code Online (Sandbox Code Playgroud)
如果在WHERE和IF条件中存在多个条件,我不完全清楚如何进行查询.任何想法?
Gor*_*off 162
你可以这样做:
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';
Run Code Online (Sandbox Code Playgroud)
我不明白你的日期格式.日期应使用本机日期和时间类型存储在数据库中.
Tre*_*hek 88
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)
Run Code Online (Sandbox Code Playgroud)
这假设user_rol, cod_office组合是主键.如果只有其中一个是PK,则将另一个字段添加到UPDATE列表中.如果它们都不是主键(这似乎不太可能),那么这种方法将始终创建新记录 - 可能不是想要的.
但是,这种方法使预编译语句更容易构建,更简洁.
Har*_* CO 12
您可以使用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';
Run Code Online (Sandbox Code Playgroud)
小智 7
update table_name
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';
Run Code Online (Sandbox Code Playgroud)
为了扩展@Trevedhek 的答案,
如果必须使用非唯一键进行更新,则需要 4 次查询
注意:这不是交易安全的
这可以使用临时表来完成。
步骤 1:创建临时表键和要更新的列
CREATE TEMPORARY TABLE temp_table_users
(
cod_user varchar(50)
, date varchar(50)
, user_rol varchar(50)
, cod_office varchar(50)
) ENGINE=MEMORY
Run Code Online (Sandbox Code Playgroud)
步骤 2:将值插入临时表
第三步:更新原表
UPDATE table_users t1
JOIN temp_table_users tt1 using(user_rol,cod_office)
SET
t1.cod_office = tt1.cod_office
t1.date = tt1.date
Run Code Online (Sandbox Code Playgroud)
步骤 4:删除临时表
| 归档时间: |
|
| 查看次数: |
230926 次 |
| 最近记录: |