2012-02-07 90 views
2

這是使用堆棧溢出我的第一次,所以我希望我要求在正確的道路這個問題。SQL查詢 - 添加NULL結果SELECT查詢

我有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),有幾個客戶沒有顯示在結果中從我的第二個查詢,因爲他們在AuthorityId = 11的標識符表中沒有記錄。我想生成一個列表,顯示所有活動客戶以及AuthorityId列中的數據,但是如果活動客戶沒有在AuthorityId = 11的標識符表中記錄,我希望它聲明爲NULL,以便我可以清除丟失的數據。

我希望這是清楚的是我期待的。

在此先感謝您的幫助!

回答

1

只是改變JOINLEFT 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 

UPDATE要替換,如果你想改變(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 
+1

是不是你留下參加由「AND AuthorityId = 11」取消了呢?結果集不包含標識符中沒有記錄的任何客戶,這需要包含在聯合聲明中,或者使用ISNULL或類似方法進行覈算。 – GarethD 2012-02-07 16:19:47

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 
+0

謝謝!雖然這些答案都是相似的,但我使用了這個答案,並且工作得很完美。感謝您的快速回復! – Brandon 2012-02-07 20:41:19

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 

左外連接或左聯接是你想要的這裏。

+0

這將返回C.StatusID <> 1的客戶,因爲您在左外連接中包括此項! – GarethD 2012-02-07 16:15:31