Здравствуйте, elmal, Вы писали:
S>>Непонятно, что значит "1 ко многим". В примере почему-то приведено наоборот — "многие к одному", т.к. джойн идёт по primary key основной таблицы, а не по её foreign keys.
E>Именно 1 ко многим. В данном примере это означает, что одной Invoice соответствует много CityID и ManagerID.
Что у нас является primary key в таблицах ServiceDistributionInvoice, Event, invoice?
Как определены foreign key?
E>То есть в Invoices не будет этих полей, но они будут в таблицах City и Manager будет поле InvoiceID.
Тогда непонятна семантика запроса.
Вот у меня есть invoice с некоторой суммой, который привязан к десяти "городам".
У городов есть классифицирующий признак — ну, например, регион. Связь — многие-к-одному, то есть в одном регионе много городов. Пусть у нас сумма инвойса = 100р, в регионе 1 — три города, в регионе 2 — семь городов.
Берём, считаем "сумму" по регионам:
select city.RegionID, sum(i.Amount) from city
inner join Invoice i on city.invoiceID = i.ID
group by city.RegionID
Получим что-то типа
id
-- -----
1 300
1 700
Физический смысл этого от меня ускользает.
Можно посчитать это чуть быстрее, если сделать
select c.regionId, invoiceCount*i.Amount as Totals from
(select invoiceId, regionId, count(*) as invoiceCount from city group by invoiceId, regionId) c
inner join invoice i on i.id = c.invoiceId