我查看了我找到的所有相关问题,但找不到会回答我的问题。Mysql在一个查询中更新多列的一列
我有一个表是这样的:
id | name | age | active | ...... | ... |
其中“ID”是一个主键,...这意味着有像30列。 “活动”列是tinyint类型。
我的任务:
更新ID 1,4,12,55,111(那些只是一个例子,它可以在总共1000不同内径),用活性= 1在单个查询。
我所做的:
UPDATE table SET active = 1 WHERE id IN (1,4,12,55,111)
其在事务内,因为我更新在这个过程中别的东西。
引擎是InnoDB的
我的问题:
有人告诉我,做这样的查询等效于在执行5个查询,引起IN将转换为一个给定数量的OR,并逐个运行它们。
最终,而不是1我得到N这是IN中的数字。
他建议创建一个临时表,在其中插入所有新值,然后通过连接进行更新。
他对吗?兼顾和表现。
你有什么建议?我以为INSERT INTO ..在DUPLICATE UPDATE将有所帮助,但我没有所有的数据的行,只有它的ID,并且我想设置活动= 1。
也许这个查询较好?
UPDATE table SET
active = CASE
WHEN id='1' THEN '1'
WHEN id='4' THEN '1'
WHEN id='12' THEN '1'
WHEN id='55' THEN '1'
WHEN id='111' THEN '1'
ELSE active END
WHERE campaign_id > 0; //otherwise it throws an error about updating without where clause in safe mode, and i don't know if i could toggle safe mode off.
谢谢。
是的,他是正确的或使用存在。 Update table set active = 1 where Exists(从table2中选择1,其中...) –