我表格中的每一行数据都有大约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;
答案 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.)
另外,请记住混合AND
和OR
时的括号。
有一些方法可以“简化”计算。例如,如果任何参数为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