我在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 |
只需为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)
一种选择:
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 +'%'
尝试使用此代替:
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
欢呼声。
尝试一下
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)
您可以尝试此操作,当我需要空值时,我总是在查询或过程中使用此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