1

伙计们,
我有一个包含 CategoryID(主键)、ParentID(int 非空)和 Category(nvarchar 非空)的 Category 表。
我正在尝试在此表中插入和检索 ID 为 CategoryID 的类别和 ID 为 ParentID 的子类别。
我一直在尝试整个周末都没有运气,希望你能帮助我。我正在使用 MSSQL 2008。
表结构应如下所示:

-Category1          
        SubCategory1  
        SubCategory2  
    ...  

-Category2  
            SubCategory2  
            SubCategory2  
    ...  

任何帮助将不胜感激

4

3 回答 3

0

检查公用表表达式,这些表达式允许您创建“递归选择”。 http://www.mssqltips.com/sqlservertip/1520/recursive-queries-using-common-table-expressions-cte-in-sql-server/

于 2012-05-07T12:42:17.477 回答
0

您可以使用递归公用表表达式:

WITH cteTable(madeUpColA, madeUpColB, Etc) as
(
   -- this select statement with the union all is what does the recursive query
   SELECT aCol as madeUpColA, bCol as madeUpColB, Etc
   from dbo.someTable
   UNION ALL
   SELECT aCol as madeUpColA, bCol as madeUpColB, Etc
   FROM dbo.someTable st
   INNER JOIN cteTable as c -- inner join on relationship
   ON st.aCol = c.madeUpColA
)
-- this select statement is what retrieves the data from the above query
SELECT madeUpColA, madeUpColB, Etc
FROM cteTable
-- add your other criteria here

您可以使用MSDN 文档WITH语句来专门化您的查询

于 2012-05-07T12:59:01.593 回答
0

你只是在寻找一个简单的自我加入吗?如果是这样,这应该工作:

select parent.category, subcat.category as subcategory
from Category subcat join
     Category parent
     on subscat.parentid = parent.categoryid

还是需要遍历整个父母链?如果是这样,那么递归 CTE 是更好的方法。

于 2012-05-07T20:35:12.613 回答