2011-10-13 63 views
9

我是MySQL的新手。在單個查詢中更新具有不同值的多行 - 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」來提高性能(沒有它在表中的每一行會測試)。

但是,如果我有這樣的塞納里奧(當我不想爲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) 

回答

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) 
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 
相關問題