编写查询以根据组中的项目获取组中的所有记录

时间:2009-07-08 15:45:14

标签: sql sql-server tsql

对于无益的头衔感到抱歉,但希望我能够解释得这么好。

假设我有三张桌子,

Item
  ItemKey
  ItemName

Group
  GroupKey

GroupItem
  GroupKey
  ItemKey

给定一个ItemKey,我如何从项目表中获取属于包含项目键的组的所有记录?

所以,如果我有

Item
   1    ItemA
   2    ItemB
   3    ItemC

Group
   1
   2
   3

GroupItem
   1     1
   1     2
   2     1
   2     2
   3     2
   3     3

传入1将返回ItemA和ItemB,但不返回ItemC,因为没有包含ItemA和ItemC的组。

2 个答案:

答案 0 :(得分:3)

select distinct ItemName
from Item I
inner join GroupItem GI
    on I.ItemKey = GI.ItemKey
where GI.GroupKey in
    (select GroupKey
    from GroupItem
    where ItemKey = @Param)
-- @Param is the input parameter. Change for you
-- DBMS

或:

select distinct ItemName
from GroupItem GI_MemberOf
inner join GroupItem GI_Map
    ON GI_Map.GroupKey = GI_MemberOf.GroupKey
inner join Item I
    on I.ItemKey = GI_Map.ItemKey
where GI_MemberOf.ItemKey = @Param
-- @Param is the input parameter. Change for you
-- DBMS

答案 1 :(得分:1)

您可以使用子查询。

SELECT DISTINCT i.ItemName
FROM GroupItem gi JOIN
  Item i ON gi.ItemKey = i.ItemKey
WHERE gi.GroupKey IN (
  SELECT DISTINCT GroupKey FROM GroupItem WHERE ItemKey = @Param
)