客戶表共有1000個客戶,其中1500個訂單在2016財年。但是我們想在FY中顯示所有客戶的訂單總數2016年客戶是否在該FY下單。但SQL Server 2012中的以下查詢僅顯示1490.爲什麼這個左外部連接不包括左邊的所有主鍵
我們在這裏可能會丟失什麼?
SELECT c.CustomerID, count(*) AS TotalOrders
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.FiscalYear = '2016'
GROUP BY c.CustomerID
UPDATE:
下面的查詢返回只有1次以上的記錄(1491) - 還缺9條記錄。
SELECT c.CustomerID, count(*) AS TotalOrders
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
AND o.FiscalYear = '2016'
GROUP BY c.CustomerID
where子句在連接後應用。所以連接爲沒有訂單的客戶返回空值。但由於這些客戶沒有訂單,因此財務年度不等於2016年,因此記錄被排除在外。要更正將外部聯接涉及的限制條件移動到聯接條件,以便限制與聯接一起施加。 – xQbert
您的總記錄數應該是1000(客戶),總數應該是1500.總和小於1500的唯一可能差異是您已經刪除了客戶和孤兒訂單。或者你的2016年訂單1500的數量是錯誤的開始。 'SELECT * from customer where customerID not in(Select customerID from customers)and FiscalYear ='2016''給你一些記錄? – xQbert
是的,我會開始檢查像:您的FiscalYear實際上是不同的「2016」的所有記錄?有錯別字的可能嗎?記錄如何被標記刪除(bit/int標誌)? –