我可以使用一个查询来更新多行吗?
如何将以下查询进行联合:
UPDATE tablename SET col1='34355' WHERE id='2'
UPDATE tablename SET col1='152242' WHERE id='44'
update tablename
inner join (
select '34355' col1, '2' id union all
select '152242' col1, '44' id
) map on map.id = tablename.id
set tablename.col1 = map.col1
你可以这样做吗?当然可以。但是你应该这样做吗?绝对不行。
考虑一下五年后看你的代码的人。哪个更易读,这个:
UPDATE tablename SET col1='34355' WHERE id='2';
UPDATE tablename SET col1='152242' WHERE id='44';
UPDATE tablename SET col1 = IF(id='2', '34355','152242') WHERE id='2' OR id='44';
BEGIN;
UPDATE tablename SET col1='34355' WHERE id='2';
UPDATE tablename SET col1='152242' WHERE id='44';
COMMIT;
这样,当更新第2行但不更新第44行时,您可以确保没有其他查询会运行。
你可以使用 OR
子句与 IF()
函数(或其他 RDBMS 的 CASE WHEN...
)组合
UPDATE tablename SET col1 = IF(id='2', '34355','152242')
WHERE id='2' OR id='44'
IF
或CASE
可使表只被扫描一次而非多次。 - JNKid
已经被索引了,所以单个查询不会进行表扫描。我相信 cyberwiki 的答案是最好的。 - The Scrum Meister