2012-05-02 8 views
16

値と等しくなく、返されたデータにNULLを含む行を選択するにはどうすればよいですか? 私が試してみた:T-SQL:NULLを含む値と等しくない行を選択します。

SET ANSI_NULLS OFF 
SELECT TOP 30 FROM Mails 
WHERE assignedByTeam <> 'team01' 

を私がコラムassignedByTeamで「team01」を持っているが、私はまた、NULLを含む結果を望んでいない行を返すようにしたいです。残念ながら、上記のコードは動作しません(ヌルを返しません)。

私はMS SQL Server 2008 Expressを使用しています。

答えて

19

明示的にNULLをチェックしてみてください。

SELECT TOP 30 col1, col2, ..., coln 
FROM Mails 
WHERE (assignedByTeam <> 'team01' OR assignedByTeam IS NULL) 
+0

+1これはブール論理の美しさです。 – JonH

+1

ええ、ええ、私は、これをやるより短い方法があると思っていました。とにかく、努力のおかげで! – Val

+4

@ ValCool:SQL標準では、このための演算子が「IS DISTINCT FROM」と呼ばれますが、SQL Serverはこれをサポートしていません。 MySQLには非標準のnull安全な等価演算子 'NOT a <=> b'がありますが、SQL Serverでもこれを行うことはできません。 –

0
where column != 'value' or column is null 
+0

ほとんどのSQL方言で '!='は機能しますか? – MarioDS

+1

@MarioDeSchaepmeester:そうです。 –

3
SELECT TOP 30 FROM Mails 
WHERE assignedByTeam <> 'team01' 
OR assignedByTeam is null 
8

あなたが二回臭いのすべてを入力して、条件の多くを持っている場合。

SELECT TOP 30 FROM Mails 
WHERE COALESCE(assignedByTeam,'') <> 'team01' 

COALESCE演算子は、リストの最初のnull以外の値を返します。 assignedByTeamがnullでない場合、assignedByTeamの値を 'team01'と比較します。しかし、assignedByTeamがnullの場合、ブランクの 'と' team01 'を比較します。それは、基本的には次の略記です:

SELECT TOP 30 FROM Mails 
WHERE (CASE WHEN assignedByTeam IS NULL THEN '' ELSE assignedByTeam END) <> 'team01' 

第二の方法は、例えば、あなたの状態を条件付きにすることです:

SELECT TOP 30 FROM Mails 
WHERE 1 = CASE WHEN assignedByTeam = 'team01' THEN 0 ELSE 1 END 

この例では、彼らが上がらないことから、ELSE値は、すべてのNULLの行が含まれます'team01'と等しいです。

+0

もし私がこれに対して2度投票することができたら、私はそうするでしょう。 – Matt

+0

私の投票を得ました。いいぞ。 – MikeJRamsey56

10
SELECT TOP 30 FROM Mails 
WHERE ISNULL(AssignedByTeam,'') <> 'team01' 

合体文を見ましたが、ISNULL()が効率的です。

+1

これは私の意見では最もエレガントな解決策です。 – Amarundo

関連する問題