2013-09-21 65 views
1

我的MySQL语句(我用了4天才找到一个工作的)应该取1给定的值,并检查3个不同的列,如果它们被填充或NULL。如果该列有一个值,则会转到下一列。如果该列为NULL,则应将给定值写入该单元格。MySQL语句总是将值设置为0当更新设置

不幸的是,我的声明能够获取该列,但是当我尝试设置该值时,它始终设置为0.当我尝试对现有值+1进行设置时没有问题。

声明:

UPDATE `license` SET 
    `hardwareid1` = IF(`hardwareid1` = 123,`hardwareid1` = 987, `hardwareid1`) , 
    `hardwareid2` = IF(`hardwareid2` = 123, `hardwareid2` = 987, `hardwareid2`) 
    WHERE `code` = 99 

= 123是,在生产中我将使用IS NULL987代表从 “$值”

因此,例如值,如果hardwareid1是真的123它doestn写代替987而是0

请帮

回答

0
UPDATE license 
SET  hardwareID3 = CASE WHEN hardwareID1 IS NOT NULL AND 
           hardwareID2 IS NOT NULL AND 
           hardwareID3 IS NULL 
           THEN 987 
           ELSE hardwareID3 END, 
     hardwareID2 = CASE WHEN hardwareID1 IS NOT NULL AND 
           hardwareID2 IS NULL 
           THEN 987 
           ELSE hardwareID2 END, 
     hardwareID1 = CASE WHEN hardwareID1 IS NULL 
           THEN 987 
           ELSE hardwareID1 END 
WHERE code = 99 

查询做什么时hardwareID1 IS NULL新值987将在列插入。同时,如果hardwareID1具有值并且hardwareID2为空,则hardwareID2的值也将被改变。否则,所有的价值都会保留下来。

+0

UPDATE许可证 SET hardwareID1 = IF(hardwareID1 = 123,987,hardwareID1) hardwareID2 = IF(hardwareID1 = 55,987,hardwareID2) WHERE代码= 99 试过,用于第一工作列,但从来没有为第二个 – PoscheL

+0

尝试我上面的查询。 –

+0

神圣的废话,你是一个天才:)为什么是难以理解的MySQL文档,这里的人总是这真棒:)为第三列生病只需添加另一个“hardwareid2 ....”吧? – PoscheL

0

我不知道,但是你的SQL看起来应该不是这样吗?

`hardwareid1`=CASE 
WHEN `hardwareid1`= NULL THEN set_to_xy 
+0

我试过CASE,但不知何故,它不工作 – PoscheL