2015-05-01 103 views
-1

我有一個查詢連接三個表並返回一個別名計算作爲最後一個字段。當加入的字段中存在空值時,該值通常爲空。加入效果很好。使用WHERE IS NULL返回所有值

我想只返回記錄,我在計算字段中得到空值。

但是,如果我添加

WHERE field_name IS NULL 

到最後我沒有得到任何記錄

如果我添加

WHERE field_name IS NOT NULL 

我得到的一整套,我可以看到幾個記錄爲事實null

任何解釋爲什麼或如何解決這個問題?

編輯:我找到了我的情況的解決方案。字段名稱是上面計算的別名。當我在where子句中複製計算時,不是放置別名,而是正確運行。

+6

你確定它們是實際的'NULL'而不是字符串''NULL''嗎?您可能不得不展示更多的查詢。 –

+1

我認爲這會有助於我們看到你正在計算的連接和表達式。 – shawnt00

+2

哦。只是一個想法 - 你是否在你的'SELECT'子句中沿'a * b * field_value * c'的行作爲field_value' - 即創建一個與現有列名稱匹配的別名?因爲如果是這樣的話,請注意在''SELECT'之前運行'WHERE',所以它會過濾*列*,而不是你的計算值。 –

回答

0

,我發現我的情況的解決方案。字段名稱是上面計算的別名。當我在where子句中複製計算時,不是放置別名,而是正確運行。

0

鑑於外部聯接:

select * 
from table1 
left join table2 on table2.table1_id = table1.id 

的方式到is null過濾器適用於連接表是把它的連接條件:

select * 
from table1 
left join table2 on table2.table1_id = table1.id 
    and table2.col1 is null 

select * 
from table1 
left join table2 on table2.table1_id = table1.id 
where table2.col1 is null 

因爲如果連接未命中,所有列S IN連接表是空的,因此使用在whereis null將返回連接到該行有一個空所有行未參加所有行。\