2013-04-08 87 views
7

我在SQL Server 2008中有兩個表,並且通過執行JOIN我想獲取所有值,但是隻有記錄存在的值即使我需要帶NULL記錄的字段。返回所有值,包括NULL

這裏是一個如何tableA看起來像

|IPAddress |DNSRecord| 
|192.168.1.1|Test  | 
|192.168.0.1|Test1 | 

tableB存儲以下記錄

的例子
|NetworkAddress|SerialNo | 
|192.168.1.1 |1Z5A789DS| 
|192.168.0.1 |NULL  | 

我的查詢返回我需要的字段是以下

SELECT 
    t1.IPAddress, 
    t1.DNSRecord, 
    t2.SerialNo, 
    t2.IPAddress 
FROM tableA t1 
JOIN tableB t2 ON t1.IPAddress = t2.NetworkAddress 
WHERE 
    IPAddress LIKE '%' [email protected] + '%' 
    AND SerialNo LIKE '%' [email protected] +'%' 

這個查詢的問題是,我得到以下結果LT

|IPAddress |DNSRecord|SerialNo | 
|192.168.1.1|Test  |1Z5A789DS| 

而且我想獲得返回以下結果,而不是

|IPAddress |DNSRecord|SerialNo | 
|192.168.1.1|Test  |1Z5A789DS| 
|192.168.0.1|Test1 |NULL  | 

回答

10

只需爲SerialNo的情況添加一個條件爲NULL。 有了您的實際情況,這種情況下,從選擇拒絕

SELECT t1.IPAddress, 
t1.DNSRecord, 
t2.SerialNo, 
t2.IPAddress 
FROM tableA t1 
JOIN tableB t2 ON t1.IPAddress = t2.NetworkAddress 
WHERE 
IPAddress LIKE '%' [email protected] + '%' 
AND (SerialNo LIKE '%' [email protected] +'%' OR SerialNo is NULL) 
+0

真棒:D工作:)在8分鐘內,我會接受它:)我試過這之前,但沒有括號,它沒有工作:)感謝很多的幫助:) – Farkiba 2013-04-08 09:47:20

+1

樂意提供幫助,括號內包含了兩個OR條件。 OR的結果被評估並應用於AND全局條件。 – bAN 2013-04-08 09:50:27

1

嘗試使用這個:

SELECT t1.IPAddress, 
t1.DNSRecord, 
t2.SerialNo, 
t2.IPAddress 
FROM tableA t1 
FULL OUTER JOIN tableB t2 ON t1.IPAddress = t2.NetworkAddress 
WHERE 
IPAddress LIKE '%' [email protected] + '%' 
AND SerialNo LIKE '%' [email protected] +'%' 

參見:OUTER JOIN

乾杯。

+0

出於某種原因,它仍然給了我同樣的結果,謝謝爲你的時間:) – Farkiba 2013-04-08 09:44:39

1

試試這個

SELECT t1.IPAddress, 
t1.DNSRecord, 
t2.SerialNo, 
t2.IPAddress 
FROM tableA t1 
JOIN tableB t2 ON t1.IPAddress = t2.NetworkAddress 
WHERE 
IPAddress LIKE '%' [email protected] + '%' 
AND (SerialNo LIKE '%' [email protected] +'%' OR SerialNo IS NULL) 
3

一種選擇:

SELECT t1.IPAddress, 
t1.DNSRecord, 
t2.SerialNo, 
t2.IPAddress 
FROM tableA t1 
JOIN tableB t2 ON t1.IPAddress = t2.NetworkAddress 
WHERE 
IPAddress LIKE '%' [email protected] + '%' 
AND coalesce(SerialNo, @SerialNo) LIKE '%' [email protected] +'%'