2012-01-24 25 views
28

を動作しません:クエリが、私はこのような非常に単純なクエリを持って

SELECT * FROM `all_conversations` WHERE `deleted_1` != '1'; 

そして、私のdeleted_1もデフォルトではnullまたは一部のユーザーIDですが、何らかの理由でこのクエリはいつも私に0の行を返します。私も<>を試しましたが、何が間違っている可能性はまだありますか?

EDTI、それはNULLはので、私は私のクエリを変更し、今では正常に動作したので、私は私の問題は、デフォルト値deleted_1場であったことを見つけるより多くのquerysを実行した後に

SELECT * 
FROM `all_conversations` 
WHERE `deleted_1` != 'NULL' 
AND `deleted_1` != 23 
+1

を使用することをお勧めしますか? –

+5

'WHERE \' deleted_1 \ '!= 'NULL''あなたはこれをしてはいけません。 NULLは特別です、私の答えを見てください。 – TimWolla

+0

@TimWollaありがとう、私はあなたのやり方をします。非常に不明確な質問については – Linas

答えて

65
SELECT * FROM all_conversations WHERE deleted_1 <> 1 OR deleted_1 IS NULL 

NULL値は特別な処理を必要とする:http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html

最初のものは有効なSQLで2つ目は、MySQLの追加であると私は!=の賛成でダイヤモンド演算子(<>)を使用してお勧めしたいです。

+2

私は!=を使用することをお勧めします。なぜなら、より読みやすく、あなたはSQLではなくmysqlを使用しているからです。 – Andrew

-2

どの程度取り除きます1?

SELECT * FROM `all_conversations` WHERE `deleted_1` != 1; 
+0

これは私の最初の考えでもありましたが、http://dev.mysql.com/doc/refman/5.5/en/type-conversion.htmlは、これが自動的に起こるはずであることを暗示しているようです... – ziesemer

+0

最初は何もしません私は、私のフィールドのほとんどがnullであることが問題になるかもしれないと思ったが、数字を持っていても何も選択していない。 – Linas

+0

私は問題がそのフィールドであると推測するので、いくつかの数字があっても何も返されない前に 'deleted_1'が' NULL'でない行を返しました。デフォルトでは 'NULL'ですが、それは0に設定しなければならないかもしれません。 – Linas

4

これを試すことができますか:deleted_1 is not null and deleted_1 != '1'

mysql> select 0 is not null and 0 != '1', 1 is not null and 1 != '1', null is not null and null != '1'; 
+----------------------------+----------------------------+----------------------------------+ 
| 0 is not null and 0 != '1' | 1 is not null and 1 != '1' | null is not null and null != '1' | 
+----------------------------+----------------------------+----------------------------------+ 
|       1 |       0 |        0 | 
+----------------------------+----------------------------+----------------------------------+ 

またはこのdeleted_1 is null or deleted_1 != '1'

mysql> select 0 is null or 0 != '1', 1 is null or 1 != '1', null is null or null != '1'; 
+-----------------------+-----------------------+-----------------------------+ 
| 0 is null or 0 != '1' | 1 is null or 1 != '1' | null is null or null != '1' | 
+-----------------------+-----------------------+-----------------------------+ 
|      1 |      0 |       1 | 
+-----------------------+-----------------------+-----------------------------+ 

それは本当にあなたが戻って取得したいかに依存します。

2

はそれはあなた

SELECT * 
FROM `all_conversations` 
WHERE `deleted_1` IS NOT NULL 
AND `deleted_1` <> 23 
3

のために働くことを願っています。これを試してみて、私は1は、文字列のように引用符で囲まれているのはなぜNULLセーフオペレータと否定

SELECT * FROM `all_conversations` WHERE NOT(`deleted_1` <=> '1'); 
+0

私が探していたもの! – Gediminas

関連する問題