これはとても基本的なようですが、私はより良い言葉の不足のために大変です。私は2つのテーブルを持っている、のは千数百recondsが各テーブルにalbums
とartists
NullとIN()は予期せぬ結果をもたらします
CREATE TABLE `albums` (
`album_id` bigint(20) NOT NULL AUTO_INCREMENT,
`artist_id` bigint(20) DEFAULT NULL,
`name` varchar(200) NOT NULL,
PRIMARY KEY (`album_id`)
)
CREATE TABLE `artists` (
`artist_id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(250) NOT NULL,
PRIMARY KEY (`artist_id`)
)
あり、それらを呼びましょう。アルバムの行の一部がnull artist_id
であることが予想されます。しかし
、私はアルバムなしのアーティストを見つけるために、次のクエリを実行する場合:
SELECT * FROM artists WHERE artist_id NOT IN (SELECT artist_id FROM albums)
SELECT * FROM artists WHERE artist_id NOT IN (SELECT artist_id FROM albums WHERE artist_id IS NOT NULL)
...と私は戻って数千行を取得:だから私はこの1つを試してみました。私の質問です:なぜ最初のクエリは、任意の数値= NULLという考え方で動作しているようですか?または、NULLがIN()
ステートメントで奇妙な結果になっていますか?私はこれが私が逃した基本的なものだと感じています。私は通常、dbテーブルではNULLを使用しません。
NOT EXISTSのように思えますが、やや速かったです。情報をありがとう! –