Запрос 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 ответ

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

Это из-за соединения. Детали создают в ваших результатах идентификатор повторяющегося отношения "один ко многим". Повторный ID затем подсчитывается каждый раз; таким образом, увеличивая количество, чтобы соответствовать количеству записей в деталях заказа. Этого можно избежать, либо не выполняя объединение, либо используя отдельный счетчик orderID, как указано выше.

Если вам нужна какая-либо информация из деталей заказа, или вы хотите исключить из ваших заказов количество заказов без деталей, то вам нужно объединение. В противном случае я бы удалил его и его отличия, поскольку он просто создает накладные расходы и увеличивает стоимость получения ваших результатов.

Кроме того, если у вас есть заказы без подробностей, и вы хотите, чтобы они были включены, вам нужно изменить свое объединение на ЛЕВОЕ, а не просто (Внутреннее). В качестве объединения будут исключены заказы без подробностей. Если вы не хотите, чтобы эти заказы без подробностей учитывались при подсчете, тогда подходит внутреннее соединение.

Другие вопросы по тегам