внутреннее соединение против декартового произведения - PullRequest
0 голосов
/ 25 мая 2019

У меня вопрос (данные tera): «какой продукт несет наименьшую стоимость пересылки». У меня есть 2 следующие таблицы

       product table               shipmethod table
      productid       name            shipmethodid  shiprate
        1             abc                1             2     
        2             def                2             4  

, но таблица продуктов не имеет прямой связи с таблицей методов доставки. Однако существует косвенная связь через2 следующие таблицы

SalesOrderDetail                             SalesOrderHeader
id   productid    salesorderid           id     salesorderid    shipmethodid
1     1                 1                 1         1                1
2     2                 2                 2         2                2   

я использовал внутреннее объединение для выбора данных из разных таблиц

select  pr.name , sm.shiprate from Dice_RDM.Product pr
inner join Dice_RDM.SalesOrderDetail so
on so.productid = pr.productid
inner join Dice_RDM.SalesOrderHeader sh
on sh.SalesOrderID = so.salesorderid
inner join Dice_RDM.ShipMethod sm
on sm.ShipMethodID=sh.ShipMethodID
QUALIFY ROW_NUMBER() OVER (ORDER BY sm.ShipRate) <=1;

i am getting values 
name        shiprate
abc          2

это правильный подход?

...