Вложенная таблица категорий с категорией и подкатегорией

Я, ребята,
У меня есть таблица категорий с CategoryID (первичный ключ), ParentID (int не нуль) и Category (nvarchar не ноль).
Я пытаюсь вставить и извлечь в эту таблицу категории с идентификатором CategoryID и подкатегории с идентификатором ParentID.
Я пробовал весь уик-энд без удачи и надеюсь, что вы мне поможете. Я использую MSSQL 2008.
Структура таблицы должна выглядеть так:

-Category1          
        SubCategory1  
        SubCategory2  
    ...  

-Category2  
            SubCategory2  
            SubCategory2  
    ...  

Любая помощь будет очень ценится

3 ответа

Решение

Проверьте общие выражения таблиц, они позволяют вам создавать "рекурсивные выборки". http://www.mssqltips.com/sqlservertip/1520/recursive-queries-using-common-table-expressions-cte-in-sql-server/

Вы можете использовать рекурсивное общее табличное выражение:

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 заявление, чтобы специализировать ваш запрос

Вы просто ищете простое самостоятельное присоединение? Если так, это должно работать:

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

Или вам нужно пересечь целую цепочку родителей? Если так, то рекурсивный CTE - лучший подход.

Другие вопросы по тегам