在单个查询中更新具有不同值的多个行 - MySQL

时间:2011-10-13 19:36:57

标签: mysql rows

我是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)

我正在使用“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)

上面的代码会将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)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

UPDATE `table_name` SET `field_name1` = CASE `id`
WHEN '1' THEN 'value_1'
WHEN '2' THEN 'value_2'
WHEN '3' THEN 'value_3'
ELSE `field_name1`
END,
`field_name2`= CASE id
WHEN '1' THEN 'value_1'
WHEN '2' THEN 'value_2'
WHEN '3' THEN 'value_3'
ELSE `field_name2`
END