繁体   English   中英

SQL查询:自引用外键关系

[英]SQL query: self-referencing foreign key relationship

我有两个表, tabSpareParttabSparePartCategory 每个备件属于备件类别。 我需要属于特定类别的所有备件。 但问题是备件类别可能是另一个的“子类别”,它们相互引用(“主要类别”在此FK列中具有“空”)。

假设我需要fiSparePartCategory=1所有备件以及属于category=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)))

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

在您的情况下,您需要获取特定主类别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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM