這看起來很基本,我對缺乏更好的單詞感到驚訝。我有兩個表,讓我們稱他們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`)
)
有每個表幾十萬reconds。有些專輯行的空值爲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)
...我回來一對夫婦一千行。我的問題是:爲什麼第一個查詢似乎在任何數字= NULL的想法上運行?或者這是一個奇怪的效果,NULL在IN()
聲明?我覺得這是我錯過的基本東西。我通常不會在我的數據庫表中使用NULL。
似乎不存在也稍微快一點。非常感謝您的信息! –