在订单和订单详细信息上加入的Northwind查询

时间:2014-05-08 19:34:41

标签: sql northwind

我使用NorthWind编写了如下所示的查询。

select COUNT(o.OrderId) as Orders
from Orders o
join [Order Details] od on o.OrderID = od.OrderID 

Orders有830个数据。但是当我在Orders上加入Order Details时,查询会在Order Details表格中显示2155的数据。

为什么查询结果不是830?

1 个答案:

答案 0 :(得分:3)

select COUNT( distinct o.OrderId) as Orders
from Orders o
join [Order Details] od on o.OrderID = od.OrderID 

这是因为加入。详细信息会在结果中创建一对多重复订单ID。然后每次计算重复的ID;从而使计数膨胀以匹配订单细节中的记录计数。这可以通过不进行连接或使用上面列出的orderID的不同计数来避免。

如果您需要订单详细信息中的任何详细信息,或者您希望在没有详细信息的情况下从计数订单中排除,则需要加入。否则我会将其删除,因为它只会产生开销并增加获得结果的成本。

此外,如果您的订单中没有详细信息,并且您希望它们包含在内,则需要将您的连接更改为LEFT连接,而不仅仅是连接(内部)。由于联接将排除没有详细信息的订单。如果您不希望这些订单没有您的计数中的详细信息,那么内部联接是合适的。