2013-04-08 46 views
7

Tôi có hai bảng trong SQL Server 2008 và bằng cách thực hiện JOIN Tôi muốn nhận tất cả các giá trị, tuy nhiên tôi chỉ nhận được các giá trị mà bản ghi tồn tại mặc dù tôi cần các trường có bản ghi NULL.Trả về tất cả các giá trị bao gồm NULL

Dưới đây là ví dụ về cách tableA trông giống như

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

tableB lưu trữ các hồ sơ sau đây

|NetworkAddress|SerialNo | 
|192.168.1.1 |1Z5A789DS| 
|192.168.0.1 |NULL  | 

truy vấn của tôi để trả lại cánh đồng tôi cần là sau

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] +'%' 

Vấn đề với truy vấn này là tôi nhận được các resu sau đây lt

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

Và tôi muốn có được trả lại kết quả sau thay vì

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

Trả lời

10

Chỉ cần thêm điều kiện cho trường hợp của SerialNo là NULL. Với điều kiện thực tế của bạn, trường hợp này bị từ chối từ lựa chọn

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

Tuyệt vời: D nó hoạt động :) trong 8 phút tôi sẽ chấp nhận nó :) Tôi đã thử này trước nhưng không có dấu ngoặc và nó didnt làm việc :) cảm ơn rất nhiều cho sự giúp đỡ :) – Farkiba

+1

vui lòng trợ giúp, các dấu ngoặc kèm theo hai điều kiện OR. Và kết quả của OR được đánh giá và áp dụng trên điều kiện AND toàn cầu. – bAN

1

Hãy thử sử dụng này để thay thế:

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] +'%' 

Xem: OUTER JOIN

Cheers.

+0

Đối với một số lý do nó vẫn mang lại cho tôi cùng một kết quả, cảm ơn bạn cho thời gian của bạn :) – Farkiba

1

Hãy thử điều này

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

Một thay thế:

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] +'%' 
Các vấn đề liên quan