2011-11-15 16 views
17

私はいくつかの奇妙な結果を得ているので、私はちょうど自分自身をチェックする必要があります...MySQLのクエリ - これに等しくないとこれは

SELECT * 
FROM table 
WHERE complete != 0 
AND pending != 1 

を明確にすることが、これらは許可されています

pending = 0, complete = 0 
pending = 1, complete = 1 
pending = 0, complete = 1 

これが私のクエリから返されることを許可されていない:

pending = 1, complete = 0 

ここには何が欠けていますか?

+0

が、それは私が 'の周りに括弧が必要なことだけでは'? – Shackrock

+0

括弧は必要ありません。そのクエリが機能するはずです。実行している実際のクエリ(またはテーブル)に関する詳細を投稿する必要があります。それが言葉の質問であれば、それは非常に奇妙な振る舞いです。 –

+0

私は括弧が違いを生むのではないかと疑います。あなたの質問をテーブル構造で変更できますか?私の最初の推測は、完全なものか保留中のものがintデータ型ではないことです。 –

答えて

35

試してみてください。

SELECT * 
FROM table 
WHERE NOT (complete = 0 
AND pending = 1) 

または

SELECT * 
FROM table 
WHERE !(complete = 0 
AND pending = 1) 

EDIT: 私が行って、見て: http://dev.mysql.com/doc/refman/4.1/en/expressions.html

+1

これです。元の節は* too * restrictiveです: 'complete = 1;保留= 0 'となる。 –

+0

@davidこれはそれです。ありがとう。 – Shackrock

+0

あなたはそれを受け入れられた答えとしてマークする必要があります –

9

あなたはOR、ないANDを使用する必要があります。あなたの表現は、complete = 0またはpending = 1のような任意の組み合わせを除外します。これはあまりにも制限的です。次のことを試してみてください。

SELECT * 
FROM Table 
WHERE complete != 0 OR pending != 1; 
        ^^ change AND to OR 

サンプル:(!完了= 0 、保留中= 1)http://sqlize.com/G8j6sFqo09

関連する問題