2014-06-27 90 views
0

新到MySQL(從Oracle推出),我有這個UPDATE:MySQL的UPDATE和CASE

UPDATE the_table 
SET the_col = 'the_value', 
    the_col2 = CASE WHEN the_col = 'the_value' THEN 'x' ELSE 'y' END 
WHERE a = 1; 

的想法是,如果the_col設置爲 'the_value' the_col2設置爲 'X',否則設置它到'y'。

我所看到的是the_col正在更新,但the_col2。

我沒有收到錯誤報告,所以我假設語法/用法是確定的。

就好像「SET the_col ='the_value'」設置值,以便在CASE中引用它時具有新值。我認爲這不太可能,但這似乎是發生了什麼。

我想要做的是測試更新前的列值。

+0

如果反轉SET的順序會怎樣? – Tom

+0

*如果the_col設置爲'the_value',則將the_col2設置爲'x'*但查詢中所有記錄的情況如此 –

+0

@OP:語法正確。價值將被預先設定,並應該工作。你正在使用哪個版本? –

回答

0

我不認爲the_col有新的價值,當你做了一套the_col2情況下...

但一個辦法,找出 - 運行更新兩次,做the_col,然後the_col2。注意:要創建一個臨時測試表(因爲您是MySQL的新手,可能會有所不同),a)運行DESCRIBE your_table; b)使用CREATE TABLE temp_table中的值; c)創建一個子查詢讀出your_table中的所有行並將它們插入temp_table - 例如INSERT到temp_table值(從表中選擇*)。祝你好運。

+0

謝謝。這些奇怪的事情之一。最後,我採取了創造一個觸發器來解決這個問題。 – TenG