1

我的 MySQL 语句(我用 4 天时间找到一个有效的语句)应该取 1 个给定值并检查 3 个不同的列是否已填充或为 NULL。如果该列有值,则转到下一列。如果该列为 NULL,则应将给定值写入该单元格。

不幸的是,我的语句能够获取该列,但是当我尝试设置该值时,它始终设置为 0。当我尝试 +1 现有值时,它可以正常工作。

陈述:

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

在哪里= 123,在生产中,我将使用“$value”中的示例值IS NULL的代表987

因此,如果hardwareid1 真的是123它不会写987,而是0

请帮忙

4

2 回答 2

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插入列的时间。同时,如果有值且为null ,其值hardwareID2也会发生变化。否则,它们的所有价值都将保留。hardwareID1hardwareID2

于 2013-09-21T16:46:10.020 回答
0

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

`hardwareid1`=CASE
WHEN `hardwareid1`= NULL THEN set_to_xy
于 2013-09-21T16:49:28.123 回答