如何在表单行SQL中检查是否有任何值为Null

时间:2015-05-11 10:36:09

标签: mysql

我表格中的每一行数据都有大约8个元素。我想检查某行中是否有任何元素= NULL,如下所示:

UPDATE item_list SET is_tradable='no' WHERE item_name=:itemname AND element_1 = NULL OR element_2 = NULL or element_3... etc.

我可以做同样的事情,但检查其中任何一个是否为NULL而不通过每个项目?像:

UPDATE item_list SET is_tradable='no' WHERE item_name=:itemname AND anyElement = NULL;

2 个答案:

答案 0 :(得分:1)

不,你不能做你想做的事。您需要列出所有列。

但是,您的查询不会执行此操作。您需要使用IS NULL而不是= NULL

UPDATE item_list
    SET is_tradable = 'no'
    WHERE item_name = :itemname AND
          (element_1 IS NULL OR element_2 IS NULL or element_3... etc.)

另外,请记住混合ANDOR时的括号。

有一些方法可以“简化”计算。例如,如果任何参数为concat(),则NULL将返回NULL

UPDATE item_list
    SET is_tradable = 'no'
    WHERE item_name = :itemname AND
          concat(element_1, element_2, . . . ) IS NULL 

算术运算符也是如此(但你的问题没有说明参数的类型)。

答案 1 :(得分:1)

有一种方法,但你需要在null比较中提及所有列名称

mysql> select least(null,'aa',null,'bb') ;
+----------------------------+
| least(null,'aa',null,'bb') |
+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (0.00 sec)

此处从一组值中获取least值。

所以你可以用作

WHERE item_name=:itemname 
AND least(element_1,element_2,element_3...) is null