Обновите несколько строк с разными значениями в одном запросе - MySQL - PullRequest
9 голосов
/ 13 октября 2011

Я новичок в 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)

Я использую «ГДЕ» для повышения производительности (без него проверяется каждая строка в таблице).

Но что, если у меня есть этот 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)

Приведенный выше код изменит заголовок для идентификаторов 2 и 3 на "NULL" ...

Как правильно сделать запрос, но пропустить обновление заголовка для идентификаторов 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 ]

12 голосов
/ 13 октября 2011

Установите заголовок равным себе, если вы не хотите обновлять его до другого значения.

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)
0 голосов
/ 27 августа 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...