我是MySQL的新手.
我在一个查询中使用它来更新具有不同值的多行:
UPDATE categories
SET order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END
WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
我正在使用"WHERE"来提高性能(没有它会测试表中的每一行).
但是,如果我有这个senario(当我不想更新id 2和3的标题时):
UPDATE categories
SET order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
END
WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
上面的代码会将id 2和3的标题更改为"NULL"...
进行查询的正确方法是什么,但是跳过更新id 2和3的标题仍然保持性能"WHERE id IN"给出?
也许是这样的
UPDATE categories
SET order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN THEN
WHEN THEN
END
WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
Joe*_*lli 12
当您不想将标题更新为其他值时,将标题设置为等于它自己.
UPDATE categories
SET order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
ELSE title
END
WHERE id IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)