0
更新衝突值
說我有一個我有如下表:如何在MySQL
Numbers
=======
1
2
2
1
使用MySQL(MyISAM的),我怎麼轉換1對2的和2對1的?
例如,這是不行的:
UPDATE `MyTable` SET `Numbers` = 1 WHERE `Numbers` = 2;
UPDATE `MyTable` SET `Numbers` = 2 WHERE `Numbers` = 1;
第一條語句將第二條語句執行之前的所有2的都轉換爲1分的。其結果將是:
Numbers
=======
2
2
2
2
我需要的是這樣的:
Numbers
=======
2
1
1
2
只使用MySQL是有可能嗎?
感謝Barmar。是否有必要在第一個版本中包含「WHERE Numbers IN(1,2)」?您是否僅僅通過縮小記錄集來提高性能? –
如果你不這樣做,我認爲它會將所有其他數字設置爲'NULL',除非你在'CASE'表達式中添加了'ELSE Numbers'。它還應該提高性能,因爲它不必爲所有不相關的行執行「CASE」測試。 – Barmar
@Steven George:由於CASE表達式將在WHEN中沒有匹配的行返回NULL,它將更新表中的所有行,並用NULL替換1或2以外的值。 (我有時因爲在我的CASE表達式中包含'ELSE NULL'而受到嚴厲批評,但它在那裏,即使它沒有被指定。)要刪除WHERE子句,我們希望在CASE表達式中有一個'ELSE Numbers'。不會無意中更改其他行是最重要的。使用WHERE子句也可以提高性能。 – spencer7593