2

私は2つのテーブルを持っています

表1tbl1

ID | Name
1  | stack

表2tbl2(空のテーブル)

ID | Name

私はこのクエリを持っています

SELECT id FROM tbl1 WHERE id != (SELECT id FROM tbl2)

私のサブクエリはnullを返します。これは、WHERE比較がid!= nullであることを意味し、私のid = 1なので、id 1を表示するべきではありませんか?

しかし、私はゼロを取得し続けるか、行が返されません。何故ですか?

4

4 に答える 4

2

本当にわかりませんが、やってみましたかSELECT id FROM tbl1 WHERE id NOT IN (SELECT id FROM tbl2)

于 2012-05-05T14:14:30.597 に答える
2

との比較nullは常に結果になりますunknown

何かがあるかどうかを確認したい場合は、演算子nullを使用する必要があります。is

于 2012-05-05T14:15:11.643 に答える
1

目的の結果を得るには、次を使用してみてください。

SELECT id FROM tbl1 WHERE id NOT IN (SELECT id FROM tbl2);

tbl2最初のクエリは、正確に1つのレコードが含まれている場合にのみ有効になります。

NULLは特別な値です。value IS NULLまたはvalue IS NOT NULLをチェックするときに使用する必要があります。

于 2012-05-05T14:16:50.493 に答える
0

副選択は非常に高額になる可能性があります。代わりにこの左結合を使用してみてください

SELECT tbl1.id FROM tbl1 LEFT JOIN tbl2 ON tbl2.id = tbl1.id WHERE tbl2.id IS NULL
于 2012-05-05T14:17:58.743 に答える