Запрос 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, как указано выше.
Если вам нужна какая-либо информация из деталей заказа, или вы хотите исключить из ваших заказов количество заказов без деталей, то вам нужно объединение. В противном случае я бы удалил его и его отличия, поскольку он просто создает накладные расходы и увеличивает стоимость получения ваших результатов.
Кроме того, если у вас есть заказы без подробностей, и вы хотите, чтобы они были включены, вам нужно изменить свое объединение на ЛЕВОЕ, а не просто (Внутреннее). В качестве объединения будут исключены заказы без подробностей. Если вы не хотите, чтобы эти заказы без подробностей учитывались при подсчете, тогда подходит внутреннее соединение.