根据详细信息过滤器返回主行

时间:2010-01-25 11:30:57

标签: sql linq linq-to-sql master-detail

我有一个查询,我想根据细节是否符合某个标准来返回Master行。

例如,如果至少其中一个Detail行有SomeProperty = X,我只想返回一个特定的Master行。

基于以下谓词:

        predicate = predicate.And(p =>
                                  p.BasketItems.Where(obi => obi.BasketItemTypeID ==
                                                                  (int) BasketType.Refund).Count() > 0);

生成以下SQL:

SELECT COUNT(*)
    FROM [dbo].[BasketItems] AS [t3]
    WHERE ([t3].[BasketId] = [t0].[OrderBasketID]) AND ([t3].[BasketItemTypeID] = 3)
    )) > 0)

问题在于它正在进行表扫描,因此查询需要一段时间才能运行。

只是检查我没有做任何疯狂的事情,并想知道是否有什么可以加速这个查询?

由于 邓肯

1 个答案:

答案 0 :(得分:1)

select M.basketID, max(M.field1) as field1, max(M.field2) as field2 
from dbo.basketItems as M
Inner join detail on M.basketID = detail.basketID
where detail.basketItemTypeID = '3'
group by M.basketID

(将master加入到detail中。选择所有细节都具有所需条件的行。将每个主记录的结果行缩小为1。)