2016-09-28 62 views
-2

我只有一個月的SQL服務器學習經驗,我只是想知道爲什麼第一個查詢產生正確的結果(即,連接兩個表,並且只從左表中選擇沒有匹配行的行),而第二個查詢返回空查詢。爲什麼我不能使用「where R.ApartmentID = null」從左表中檢索所有不匹配的行

首先

select R.Name, A.Name 
from tblResident as R 
left join tblApartment as A 
on R.ApartmentID = A.ID 
where R.ApartmentID is null 

select R.Name, A.Name 
from tblResident as R 
left join tblApartment as A 
on R.ApartmentID = A.ID 
where R.ApartmentID = null 

表結構

enter image description here

+2

mysql或SQL Server? – Jens

+0

我正在使用sql server – Thor

+3

可能重複[什麼是「= null」和「IS NULL」](http://stackoverflow.com/questions/2749044/what-is-null-and-is-null) –

回答

3

爲MySQL

作爲每MySQL Documentation on Working with NULL Values

不能使用算術比較運算符如=,<,或者<>到 測試爲NULL。因爲 NULL任何算術比較的結果也是NULL,則無法獲得這樣的 比較

任何有意義的結果,因此,你所經歷的結果。

例子

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL, 
    > 1 is null, null is null, null = null; 
+----------+-----------+----------+----------+-----------+--------------+-------------+ 
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | 1 is null | null is null | null = null | 
+----------+-----------+----------+----------+-----------+--------------+-------------+ 
|  NULL |  NULL |  NULL |  NULL |   0 |   1 |  NULL | 
+----------+-----------+----------+----------+-----------+--------------+-------------+ 

我認爲同樣適用於所有其他數據庫平臺。

1


嗨Tony,
好問題
您正在檢查一個空列。簡單的英語基本上沒有什麼是空的或空的。您不能使用運算符來選擇空值。運算符只能用於匹配具有值且不爲空的列。在這種情況下,爲空函數將被使用

相關問題