2016-07-04 17 views
1

SETデータ型の存在を確認する方法を知っていると言うことから始めますが、今はルックアップを無効にしようとしていますが、私は何か愚かなことをやっていると仮定しています。MySQLの値がSETデータ型フィールドにない

| billing_payment_prefs | set('allow_admin','allow_trans','allow_supress','requires_nag')  | YES |  | NULL    |        | 

をそして、すべてのレコードは、現在フィールドが言ったためにNULLです:

私は、このフィールドを持っています。 (彼らはすべてNULLだと、私は期待したい)

mysql> select count(id) from customers where billing_payment_prefs not like '%allow_trans%'; 
+-----------+ 
| count(id) | 
+-----------+ 
|   0 | 
+-----------+ 
1 row in set (0.00 sec) 

が...私が代わりに3000プラスの 0を取得:私は3000枚の+、このテーブル内のレコードと、次のクエリを実行しています。さて、私は明らかにSETフィールドに対して NOT LIKEを調べる方法がわかりませんが、 MYSQL DEVには言及していませんが、これはうまくいくと思われていました。

ご協力いただきありがとうございます。ありがとう。 NULL値に対する明示的チェックする必要はあり

+0

あなたはbilling_payment_prefsは「%allow_trans%」またはbilling_payment_prefsを好まない顧客からの 'SELECT COUNT(id)を試してみましたしましたis null'ですか? –

答えて

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 
+1

ありがとうございました。私はそれが当てはまると仮定していました。 – LokiSinclair

2

select count(id) 
from customers 
where billing_payment_prefs not like '%allow_trans%' or 
     billing_payment_prefs is null; 

これは、すべてのデータ型、列挙だけではないために保持しています。

関連する問題