我应该首先说我知道如何检查是否存在SET
数据类型,但是,我现在正试图否定查找,这似乎不起作用,所以我是假设我做了一些愚蠢的事。
我有这个领域:
| billing_payment_prefs | set('allow_admin','allow_trans','allow_supress','requires_nag') | YES | | NULL | |
并且所有记录对于所述字段当前为NULL。我在此表中有3000多条记录,并运行以下查询:
mysql> select count(id) from customers where billing_payment_prefs not like '%allow_trans%';
+-----------+
| count(id) |
+-----------+
| 0 |
+-----------+
1 row in set (0.00 sec)
...我得到0
而不是3000加(我期待它,因为它们都是NULL)。现在,我显然不确定如何在SET字段中查找NOT LIKE
,但我假设(错误地,通过事物的外观)这将起作用,即使MYSQL DEV没有'提到它。
任何帮助,非常感谢。感谢。
答案 0 :(得分:2)
您必须明确检查NULL
值:
select count(id)
from customers
where billing_payment_prefs not like '%allow_trans%' or
billing_payment_prefs is null;
这适用于所有数据类型,而不仅仅是枚举。
答案 1 :(得分:2)
您没有获得任何记录的原因是因为MySQL(以及大多数RDBMS)将NULL
视为特殊值。将某些文本与NULL
进行比较不会产生真或假,而是产生NULL
,因为将未知值与已知值进行比较会产生未知结果。
要使查询中的逻辑有效,您可以为NULL
检查添加条件:
SELECT COUNT(id)
FROM customers
WHERE billing_payment_prefs NOT LIKE '%allow_trans%' OR
billing_payment_prefs IS NULL