2013-04-08 16 views
7

Mam dwie tabele w SQL Server 2008 i robiąc JOIN Chcę uzyskać wszystkie wartości, jednak otrzymuję tylko wartości, w których istnieją rekordy, mimo że potrzebuję pól z NULL rekordów.Zwróć wszystkie wartości, w tym NULL

Oto przykład jak tableA wygląda

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

tableB sklepach następujące zapisy

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

Moje zapytanie do powrotu pola potrzebne jest następujące

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

Problem z tym zapytaniem polega na tym, że otrzymałem następujące poprawki lt

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

I chciałbym, aby zwrócił następujący rezultat zamiast

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

Odpowiedz

10

Po prostu dodaj warunek dla przypadku SerialNo ma wartość NULL. rzeczywistą stanie, sprawa ta jest odrzucana z wyborem

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

Awesome: D działa :) w 8 minut Przyjmę to :) Próbowałem tego wcześniej, ale bez nawiasów i to nie działało :) bardzo dziękuję za pomoc :) – Farkiba

+1

chętnie pomoże, nawiasy obejmują dwa warunki LUB. Rezultat OR jest oceniany i stosowany na globalnym stanie AND. – bAN

1

Spróbuj użyć zamiast tego:

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

zobacz: OUTER JOIN

Cheers.

+0

z jakiegoś powodu wciąż daje mi ten sam wynik, dziękuję na Twój czas :) – Farkiba

1

Spróbuj

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

jedną alternatywę:

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] +'%' 
Powiązane problemy