如何获取子项目的子项目?

时间:2012-02-21 20:45:18

标签: sql sql-server-2005

我有一个包含四个表的数据库:ParentCategoryChildCategoryItemsCategoriesItems。名为ItemsCategories的表是一个联接表,因为Item中的一行可以在ChildCategory中多次列出。所有表中的主键都命名为IDChildCategory中的外键列为ParentCategoryIDItemsCategories中的外键为ItemIDChildCategoryID

我需要撰写一个SELECT查询,当Name ParentCategory时,Items会返回ParentCategory列表。 Name表确实包含SELECT字段。

我不知道从哪里开始。我可以写一个ParentCategory要返回给定类别名称的JOIN ID,我可以SELECT Item.Name FROM ParentCategory INNER JOIN ChildCategory ON ParentCategory.ID = ChildCategory.ParentCategoryID INNER JOIN ItemsCategories ON ChildCategory.ID = ItemsCategories.ChildCategoryId INNER JOIN Items ON ItemsCategories.ItemId = items.ID WHERE ParentCategory.Name = 'XXX' 表格。

谢谢!

更新1 -

这有效......

{{1}}

2 个答案:

答案 0 :(得分:1)

怎么样?
SELECT i.ID
FROM ParentCategory pc
JOIN ChildCategory cc ON cc.ParentCategoryID = pc.ID
JOIN ItemsCategories ic ON ic.ChildCategoryID = cc.ID
JOIN Items i ON ic.ItemID = i.ID
WHERE pc.Name LIKE 'Name'

那应该获取Items ID,但是您可以轻松扩展SELECT列表以包含Items表中的更多数据。

答案 1 :(得分:1)

不确定我是否正确理解了您的模型:

SELECT i.ID,i.Name 
FROM ParentCategory pc 
INNER JOIN ChildCategory cc
ON pc.ID = cc.ParentCategoryID
INNER JOIN ItemsCategories ic
ON cc.ID = ic.ChildCategoryID
INNER JOIN Item i
ON ic.ItemID = i.ID
WHERE pc.Name = @ParentCategory