根据字段组过滤记录

时间:2011-03-14 21:11:54

标签: sql sql-server sql-server-2008 tsql

这就是事情 - 我需要根据字段组过滤记录。原型看起来像这样:

select distinct ID, Name from Item i 
inner join (select ItemID from ItemD where ItemDID in (146,147)) idd1 on i.ItemID = idd1.ItemID 
inner join (select ItemID from ItemD where ItemDID in (7641, 7648)) idd2 on i.ItemID = idd2.ItemID 

(重复内连接次数)

我知道我可以创建一个使用sp_executesql的存储过程并从我的应用程序中提取那些内连接,但我不禁想知道是否有更好的解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用临时表,可能比很多连接更快:

Conditions:  GroupID, ItemDID 

填写如下:

1, 146
1, 147
2, 7641
2, 7648

然后要求满足每个条件组:

select  ID
,       Name
from    Item i
where   not exists
        (
        select  *
        from    Conditions c
        left join    
                ItemID idd
        on      idd.ItemDID = c.ItemDID
                and idd.ItemID = i.ItemID
        group by
                c.GroupID
        having  count(idd.ItemDTD) = 0
        )

(查询没有经过测试;品种很多。)