这是我第一次使用Stack Overflow,所以我希望我能以正确的方式提出这个问题。
我有2个SQL查询,我试图比较并识别缺失值,虽然我在第二个查询中添加NULL字段时无法识别缺少的信息。我将列出查询,然后解释我在寻找什么。
查询#1
SELECT C.CustomerId, C.CustomerName, C.StatusId
FROM Customer C
WHERE C.StatusId = 1
ORDER BY C.CustomerName
查询#2
SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
JOIN Identifier I ON I.CustomerId = C.CustomerId
WHERE C.StatusId = 1
AND I.AuthorityId = 11
ORDER BY C.CustomerName
第一个查询为我提供了一个在我们的系统中处于活动状态的客户列表。第二个查询为我提供了一个活动客户列表,其中包含AuthorityId = 11的记录。
从我的活跃客户列表(来自查询#1的结果)中,有几个客户未显示在我的第二个查询的结果中,因为他们在Identifier表中没有AuthorityId = 11的记录。我想生成一个列表,显示所有活动客户以及AuthorityId列中的数据,但如果活动客户在Identifier表中没有AuthorityId = 11的记录,我希望它说NULL,这样我就可以清理丢失的数据。
我希望这清楚我正在寻找的东西。
提前感谢您的帮助!
答案 0 :(得分:2)
尝试:
SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
LEFT JOIN Identifier I ON I.CustomerId = C.CustomerId and I.AuthorityId = 11
WHERE C.StatusId = 1
ORDER BY C.CustomerName
答案 1 :(得分:1)
只需将JOIN
更改为LEFT JOIN
SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
LEFT JOIN Identifier I ON I.CustomerId = C.CustomerId
WHERE C.StatusId = 1
AND I.AuthorityId = 11
ORDER BY C.CustomerName
<强>更新强>
如果您想将(NULL)
值更改为NULL
或您要替换的任何字词,可以COALESCE
SELECT C.CustomerId, C.CustomerName, C.StatusId, COALESCE(I.AuthorityId, 'whatever')
FROM Customer C
LEFT JOIN Identifier I ON I.CustomerId = C.CustomerId
WHERE C.StatusId = 1
AND I.AuthorityId = 11
ORDER BY C.CustomerName
答案 2 :(得分:0)
SELECT C.CustomerId, C.CustomerName, C.StatusId, I.AuthorityId
FROM Customer C
LEFT OUTER JOIN Identifier I ON
(I.CustomerId = C.CustomerId)
AND (I.AuthorityId = 11)
WHERE (C.StatusId = 1)
ORDER BY C.CustomerName
左外连接或左连接是你想要的。