2014-06-05 152 views
1

我想只包含一個內部連接的比較,如果該值不爲空。例如。我比較地址一些地址有相同的門牌號碼街道地址和標籤,但有一個明顯的公寓號碼,但其他地址沒有公寓號碼與它們關聯,因此該值爲空。這些值不會加入。SQL空值內部連接

左外連接將不起作用,因爲我需要連接與具有空公寓值的值關聯的數據。有任何想法嗎?

select * from address a 
inner join ma_address ma 
    on a.number=ma.number 
    and a.street=ma.street 
    and a.tag=ma.tag 
    and a.apt=ma.apt 

感謝,

+0

其中RDBMS是您使用? – FuzzyTree

+0

從多個表中使用'SELECT *'可能會導致混淆。在你的'SELECT'標準中更具體一些 – Phil

+0

你也可以使用union。 –

回答

3

這是因爲在SQL,NULL不等於NULL。嘗試這樣的事情對每個連接標準

(a.<col> = ma.<col> OR (a.<col> IS NULL AND ma.<col> IS NULL)) 
+0

這個答案工作得很好。另一件讓我失望的事情是該列填充了字符串值'NULL'而不是NULL。 – scot0308

0

NULL值表示,該值是未知。 NULL的值不同於空值或零值。沒有兩個空值是相等的。兩個空值之間或NULL與任何其他值之間的比較返回未知,因爲每個NULL的值都是未知的。
空值通常表示數據未知,不適用或稍後將添加數據。例如,顧客下單時可能不知道顧客的中間名字。
以下是有關空值的信息:
1. 要在查詢中測試空值,請在WHERE子句中使用IS NULL或IS NOT NULL。
2.當在SQL Server Management Studio代碼編輯器中查看查詢結果時,空值在結果集中顯示爲NULL。
3.通過在INSERT或UPDATE語句中明確指定NULL,將列從INSERT語句中移出,或者使用ALTER TABLE語句將新列添加到現有表時,可以將空值插入到列中。
4.空值不能用於區分表中的一行與表中的另一行(如主鍵)所需的信息。


來源:http://technet.microsoft.com/en-us/library/ms191504(v=sql.105).aspx