I have a query where I want to return Master rows based on whether the detail fulfil a certain criteria.
For example, I only want to return a particular Master row if AT LEAST one of the Detail rows have SomeProperty = X.
Based on the following predicate:
predicate = predicate.And(p =>
p.BasketItems.Where(obi => obi.BasketItemTypeID ==
(int) BasketType.Refund).Count() > 0);
generates the following SQL:
SELECT COUNT(*)
FROM [dbo].[BasketItems] AS [t3]
WHERE ([t3].[BasketId] = [t0].[OrderBasketID]) AND ([t3].[BasketItemTypeID] = 3)
)) > 0)
Problem with this is it's doing a table开发者_Go百科 scan, so the query takes a while to run.
Just checking that I'm not doing anything crazy and wonder if there's anything that can speed up this query?
Thanks Duncan
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
(Join master to detail. select all rows where detail has the required criterion. Squish the resulting rows down to 1 per master record.)
精彩评论