返回包括NULL的所有值

时间:2013-04-08 09:39:55

标签: sql sql-server database sql-server-2008

我在SQL Server 2008中有两个表,并且通过执行JOIN我想获取所有值,但是我只获取记录存在的值,即使我需要具有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 '%' +@IPAddress + '%'
   AND SerialNo LIKE '%' +@SerialNo +'%'

此查询的问题是我得到以下结果

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

我希望返回以下结果

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

5 个答案:

答案 0 :(得分: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 '%' +@IPAddress + '%'
AND ( SerialNo LIKE '%' +@SerialNo +'%' OR SerialNo is NULL)

答案 1 :(得分:4)

另一种选择:

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

答案 2 :(得分: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 '%' +@IPAddress + '%'
AND SerialNo LIKE '%' +@SerialNo +'%'

请参阅:OUTER JOIN

干杯。

答案 3 :(得分:1)

试试这个

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

答案 4 :(得分:-1)

您可以尝试一下,当我需要空值时,我总是在查询或过程中使用此INCLUDE_NULL_VALUES

  SELECT 
        t1.IPAddress,
        t1.DNSRecord,
        t2.SerialNo,
        t2.IPAddress
    FROM tableA t1
    JOIN tableB t2 ON t1.IPAddress = t2.NetworkAddress
    WHERE
       IPAddress LIKE '%' +@IPAddress + '%'
       AND SerialNo LIKE '%' +@SerialNo +'%'
    INCLUDE_NULL_VALUES