我有两个表,tabSparePart
和tabSparePartCategory
。每个备件属于备件类别。我需要属于特定类别的所有备件。但问题是备件类别可能是另一个的“子类别”,它们相互引用(“主要类别”在此FK列中具有“空”)。
假设我需要fiSparePartCategory=1
的所有备件以及属于category=1
“子类别”类别的所有备件。
如何编写返回所有备件的SQL查询,无论子类别有多少级别。我希望你理解我的要求。
以下是我所拥有的内容的说明。如何使其动态,以便它可以工作,无论子类别的数量?
谢谢,蒂姆
链接到图片:http://www.bilder-hochladen.net/files/4709-lg-jpg.html
编辑:以下是另一种静态方法,只有一个子类别级别时才有效:
SELECT SparePartName
FROM tabSparePart
WHERE (fiSparePartCategory IN
(SELECT idSparePartCategory
FROM tabSparePartCategory
WHERE (idSparePartCategory = 1) OR
(fiSparePartCategory = 1)))
答案 0 :(得分:6)
您可以使用recursive Common Table Expression。
在您的情况下,您需要获取特定主要类别ID的所有备件类别ID,并将其与备件一起加入。像这样:
WITH SparePartCategories(CategoryId) AS
(
SELECT c.idSparePartCategory
FROM tabSparePartCategory c
WHERE c.idSparePartCategory = 1
UNION ALL
SELECT c.idSparePartCategory
FROM tabSparePartCategory c
JOIN SparePartCategories parent ON c.fiSparePartCategory = parent.CategoryId
)
SELECT sp.SparePartName
FROM tabSparePart sp
JOIN SparePartCategories spc ON sp.fiSparePartCategory = spc.CategoryId