三级关联表SQL查询需求:根据指定Category查询关联Items数据
解决方案:通过指定Category关联查询Items数据
没问题,这是个很常见的多表关联查询场景,咱们直接上代码加解释,保证你一看就明白。
核心思路
咱们要利用三张表的外键关联关系:Items.SubCategory_ID关联SubCategory.ID,SubCategory.CategoryParent_ID关联Category.ID,把三张表串联起来后,只需要过滤出你指定的Category即可。
完整SQL查询语句
SELECT i.ID AS ItemID, i.Info, i.Documentation, -- 如果需要展示分类相关信息,可按需添加 sc.Description AS SubCategoryName, c.Description AS CategoryName FROM Items i INNER JOIN SubCategory sc ON i.SubCategory_ID = sc.ID INNER JOIN Category c ON sc.CategoryParent_ID = c.ID WHERE c.ID = @TargetCategoryID; -- 替换成你要查询的Category的ID
关键部分解释
- 表别名:用
i、sc、c分别代替Items、SubCategory、Category,让代码更简洁易读。 - INNER JOIN:只返回三张表中存在匹配关联的记录,刚好符合你“展示关联Items”的需求;如果需要包含无Items的分类(这里用不上),可以换成
LEFT JOIN。 - WHERE条件:通过
c.ID锁定目标分类,比如你要查ID为5的分类,就把@TargetCategoryID换成5即可。 - 可选字段:如果不需要展示分类名称,只保留Items的核心字段就行,按需调整SELECT后的内容。
实际场景示例
比如你要查询Category表中ID为3的分类下所有Items,SQL可以写成:
SELECT i.ID, i.Info, i.Documentation FROM Items i INNER JOIN SubCategory sc ON i.SubCategory_ID = sc.ID INNER JOIN Category c ON sc.CategoryParent_ID = c.ID WHERE c.ID = 3;
额外提示
- 为了避免SQL注入风险,不要直接把用户输入的ID拼进SQL语句,尽量用参数化查询(比如Java的PreparedStatement、Python的参数绑定等)。
- 如果表数据量较大,建议给外键字段(
SubCategory_ID、CategoryParent_ID)添加索引,提升查询效率。
内容的提问来源于stack exchange,提问作者Afif
相关产品推荐
相关产品推荐

