You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

三级关联表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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:13:33