在MYSQL中设置IF内部(?)

时间:2016-12-18 13:21:58

标签: mysql

我是MYSQL的新手,我试图这样做:

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

这不起作用,解释: 每个"成员"有一个不同的数字(001,002,003 ......),我想把会员" 001"在表格" member1"但如果这是ocupated(它的值不同于0)设置成员" 001"在表格" member2" (一个不同的表)但我认为不可能将一个SET放在IF中。身份证并不重要。

感谢您的关注^^

1 个答案:

答案 0 :(得分: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。我喜欢用它们来提供结构和视觉帮助。