客户表共有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标志)? –