Вложенная таблица категорий с категорией и подкатегорией
Я, ребята,
У меня есть таблица категорий с 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 - лучший подход.