包含类别和子类别的嵌套类别表
本文关键字:嵌套 子类 包含类 | 更新日期: 2023-09-27 18:33:27
伙计们,
我有一个类别表,其中包含类别ID(主键),父ID(整数不为空)和类别(nvarchar不为空)。
我正在尝试在此表中插入和检索具有 ID 类别 ID 的类别和具有 ID 父 ID 的子类别。
我整个周末都在尝试,但没有运气,希望你能帮助我。我正在使用MSSQL 2008。
表结构应如下所示:
-Category1
SubCategory1
SubCategory2
...
-Category2
SubCategory2
SubCategory2
...
任何帮助将不胜感激
检查公用表表达式,这些表达式允许您创建"递归选择"。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
您可以使用 WITH
语句的 MSDN 文档来专门化查询
你只是在寻找一个简单的自我加入吗? 如果是这样,这应该有效:
select parent.category, subcat.category as subcategory
from Category subcat join
Category parent
on subscat.parentid = parent.categoryid
还是您需要穿越整个父母链? 如果是这样,那么递归 CTE 是更好的方法。