2017-02-12 47 views
1

我有一个MM的关系三个表:在许多使用自定义一对多的关系选择上排连接表

enter image description here

我有很多的麻烦试图找出如何取回仅在第一个相关的存货项目的所有包由Inventory.Stock ASC订购但也返回Bundles_Inventory.InventoryRequired领域。

我已经看到了类似问题的其他反应,但他们没有考虑到一个自定义的连接表。

我怎样才能选择所有软件包通过Inventory.Stock ASC排序,还包括Bundles_Inventory.InventoryRequired该记录?

在问候@imran
我原本:

SELECT b.Id, b.Name, i.Id, i.Name, i.Stock, bi.InventoryRequired from   Bundles b 
INNER JOIN Bundles_Inventory bi ON b.Id = bi.BundleId 
INNER JOIN Inventory i ON bi.InventoryId = i.Id 
WHERE b.ClientId = @clientId 
ORDER BY i.Stock ASC 

但显然这让我在问候了Bundles表复制数据..

我又试图

SELECT TOP 1 b.Id, b.Name, i.Id, i.Name, i.Stock, bi.InventoryRequired from Bundles b 
INNER JOIN Bundles_Inventory bi ON b.Id = bi.BundleId 
INNER JOIN Inventory i ON bi.InventoryId = i.Id 
WHERE b.ClientId = @clientId 
ORDER BY i.Stock ASC 

而现在,我试图找出如何申请一个Group By图这一点。

+0

你有尝试过? – Imran

+0

你使用了什么数据库? –

+0

MS Sql Server .. – Adrian

回答

2

您可以在大多数数据库与row_number()做到这一点:

select b.*, i.* 
from bundles b join 
    (select i.*, 
      row_number() over (partition by bi.bundleid order by i.stock desc) as seqnum 
     from bundles_inventory bi join 
      Inventory i 
      on bi.InventoryId = i.Id 
    ) i 
    on b.id = bi.bundleid 
where seqnum = 1; 

您可以在外部查询中添加where条款。