如何在SQL Server查询中获取给定id的所有子项

时间:2013-08-26 11:24:00

标签: sql sql-server

我在SQL Server数据库中有两个表:

category( 
   itemid, 
   parentid
)

ArticleAssignedCategories(
   categid, 
   artid
)

categiditemid

的外键

我希望得到artids和给定itemid的孩子(孩子的意思是给定parentid itemid的类别。)

例如;如果给定itemid = 1并且表category中有(3,1),(4,1)(5,3)

所有3,4,5都是1的孩子

有人可以帮我写一个好的查询吗?

2 个答案:

答案 0 :(得分:1)

可以使用CTE

完成递归查询
with CTE(itemid, parentid)
as (
  -- start with some category
  select itemid, parentid
  from category where itemid = <some_itemid>
union all 
  -- recursively add children
  select c.itemid, c.parentid
  from category c 
  join CTE on c.parentid = CTE.itemid
)
select count(*)
from ArticleAssignedCategories a
join CTE on CTE.itemid = a.categid

答案 1 :(得分:0)

这是查询。我希望这可以帮到你

select b.artid,count(b.artid) from category a
inner join ArticleAssignedCategories b on a.itemid = b.artid
group by b.artid