代码之家  ›  专栏  ›  技术社区  ›  Brandon

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

  •  0
  • Brandon  · 技术社区  · 15 年前

    对不起,这个标题没用,但希望我能解释得足够好。

    假设我有三张桌子,

    Item
      ItemKey
      ItemName
    
    Group
      GroupKey
    
    GroupItem
      GroupKey
      ItemKey
    

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

    如果我有

    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 回复  |  直到 15 年前
        1
  •  3
  •   Shannon Severance    15 年前
    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
    
        2
  •  1
  •   steamer25    15 年前

    您可以使用子查询。

    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
    )