MySQL不在SET数据类型字段

时间:2016-07-04 14:24:36

标签: mysql

我应该首先说我知道如何检查是否存在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没有'提到它。

任何帮助,非常感谢。感谢。

2 个答案:

答案 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