我试着理解如何更新多行不同的值,但我就是不明白。解决方案无处不在,但对我来说,它看起来很难理解。
例如,将三个更新合并为一个查询:
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';
我read的一个例子,但我真的不明白如何使查询.即:
UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
我不完全清楚如何做查询,如果有多个条件在WHERE和IF条件..任何想法?
8条答案
按热度按时间vecaoik11#
您可以这样做:
我不明白您的日期格式。日期应该使用本机日期和时间类型存储在数据库中。
mbyulnm02#
MySQL提供了一种可读性更强的方式将多个更新合并到一个查询中,这似乎更适合您描述的场景,更容易阅读,并且避免了那些难以解开的多个条件。
这里假设
user_rol, cod_office
组合是主键。如果其中只有一个是 * 主键 *,则将另一个字段添加到UPDATE列表。如果它们都不是主键(似乎不太可能),则此方法将始终创建新记录-可能不是所需的记录。但是,这种方法使预准备语句更容易构建,也更简洁。
vltsax253#
kognpnkq4#
可以使用
CASE
语句处理多个if/then场景:but5z9lq5#
要在@Trevedhek answer上扩展,
如果必须使用非唯一键进行更新,则需要4次查询
注意:这不是事务安全的
这可以使用临时表来完成。
步骤1:创建临时表键和要更新的列
步骤2:将值插入临时表
步骤3:更新原始表
步骤4:删除临时表
0g0grzrc6#
在php中,使用mysqli示例的
multi_query
方法。将结果与update 30,000 raw中的事务、插入和case方法进行比较。
**交易:5.5194580554962
垫片:0.20669293403625
案件编号:16.474853992462
多重:0.0412278175354**
如您所见,多语句查询比最高答案更高效。
以防万一,如果你得到这样的错误消息:
您可能需要在mysql配置文件中增加
max_allowed_packet
。fnvucqvd7#
此处,第4列和第1列位于表1中。第2列和第3列位于表2中
我正在尝试更新每个col1,其中col4 = col3每行的值不同
chhkpiq48#
我是这么做的:
其中,推送设置为
它工作正常