2016-12-18 56 views
0

我在MYSQL新,我試圖做到這一點(?):SET內IF在MYSQL

UPDATE team 
SET member1 = IF(member1=0, 001, SET member2 = IF(member2=0, 001, member2)) WHERE ID = ?; 

這不是工作,解釋: 每個「成員」有不同的數字( 001,002,003 ...),我想把成員「001」放在表「member1」中,但是如果這是成立的(它的值不同於0),在成員表2中設置成員「001」 「(不同的表格),但我認爲不可能將一個SET放入IF中。 id不重要。

感謝關注^^

回答

1

不,你不能加入SET聲明是這樣的。這將必須圍繞工作:

UPDATE `team` 
SET 
    `member2` = CASE WHEN `member1` = 0 AND `member2` = 0 THEN '001' ELSE `member2` END, 
    `member1` = CASE WHEN `member1` = 0 THEN '001' ELSE `member1` END 
WHERE 
    `id` = ? 
/* optional filter: considering adding it if it does not bother the performance: */ 
AND (`member1` != 0 OR `member2` != 0) 
; 

注:

  • 我用身邊表和列名反引號,我建議你這樣做 *
  • 我用CASE/WHEN代替IF,因爲IF不是ansi sql(它是針對mysql的)
  • 你也可以做兩個查詢而不是一個。這將允許您在where子句中使用過濾器,所以當不需要時不必更新列。

*正如波希米亞所指出的,它們不是ansi。我喜歡將它們用於他們提供的結構和視覺幫助。

+0

我推薦*不使用反引號*,因爲他們也都是非ANSI因爲他們引入代碼噪音 – Bohemian

+0

我改變的代碼 –

+1

這一部分,我在你的代碼 'member2' = CASE時改變'member1' = 0 AND' member2'!= 0 THEN'001'ELSE' member2' END, 其工作完美!非常感謝你的兄弟! –