2009-04-22 60 views
0

数据表:展集团上述资料查询

ItemCode ItemName  ItemGroup 
    SFD  Softdrink  NULL 
    CCL  Coco Cola  SFD 
    FNT  Fanta   SFD 
    SPR  Sprite  SFD 
    ACL  Alchol    
    TQL  Tequila  ACL 
    VDK  Vodka   ACL 

当用户查找“软饮料”,那么结果将是:

ItemCode  ItemName 
    SFD   Softdrink  
    CCL   Coca Cola   
    FNT   Fanta      
    SPR   Sprite    

我怎么能做到这一点?

谢谢。

回答

0
WITH hier (code, name) AS 
     (
     SELECT ItemCode, ItemName 
     FROM Table 
     WHERE ItemCode = 'SFD' 
     UNION ALL 
     SELECT ItemCode, ItemName 
     FROM hier 
     JOIN Table 
     ON  ItemGroup = code 
     ) 
SELECT * 
FROM hier 

这将选择甚至更深层级的项目(即您可以添加Fanta LemonFanta OrangeItemGroup = FNT,而这个查询将选择他们太)。

0

所有的软饮料都在itemgroup sfd中。试试select itemcode, itemname from table where itemgroup = 'SFD';

马克汉密尔顿指出:

除了软饮料本身不具备SFD作为其的ItemGroup。您需要在查询中添加“或ItemCode ='SFD'”。我不知道这些类别是否可以进一步嵌套,在这种情况下,递归CTE可以做到这一点

是的,可以在其中添加'或',或者递归递归。

+0

除Softdrink本身没有SFD作为其ItemGroup。您需要在查询中添加“或ItemCode ='SFD'”。我想知道这些类别是否可以进一步嵌套,在这种情况下,递归CTE可以做到这一点。 – 2009-04-22 05:46:53

0

得到它与

select ItemCode, ItemName from Items 
where itemCode in (select itemcode from Items where itemname = 'softDrink') 
or itemGroup in (select itemcode from Items where itemname = 'softDrink') 

可以这样被进一步修改的工作。