我使用 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?
select COUNT( distinct o.OrderId) as Orders
from Orders o
join [Order Details] od on o.OrderID = od.OrderID
是因为加入。详细信息会在您的结果中创建一对多关系重复订单 ID。然后每次计算重复的ID;从而增加计数以匹配订单详细信息中的记录计数。这可以通过不进行连接或使用上面列出的不同的 orderID 计数来避免。
如果您需要订单详细信息中的任何详细信息,或者您想从没有详细信息的订单中排除,那么您需要加入。否则我会删除它和不同的,因为它只会产生开销并增加获得结果的成本。
此外,如果您有没有详细信息的订单并且您希望将它们包括在内,您需要将您的连接更改为左连接,而不仅仅是一个连接(内部)。因为加入将排除没有详细信息的订单。如果您不希望这些订单在您的计数中没有详细信息,那么内部连接是合适的。