2016-12-18 89 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, 其工作完美!非常感谢你的兄弟! –