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

SQL语句编写求助:获取自关联分类的父级与子级名称

解决自关联分类表的JOIN查询问题

你需要对categories表做自连接(self-join),因为要同时获取子分类和它对应的父分类名称。你的思路方向是对的,但直接访问categories.parent.name是无效的——单表JOIN只能拿到当前行的字段值,要获取父分类的名称,必须再关联一次父分类的记录。

正确的SQL语句

SELECT 
  parent_cat.name AS Categorie,
  sub_cat.name AS Subcategorie,
  fd.examplecol1,
  fd.examplecol2
FROM Fooddiary fd
JOIN categories sub_cat ON fd.categorie = sub_cat.id
LEFT JOIN categories parent_cat ON sub_cat.parent = parent_cat.id
WHERE fd.examplecol1 = 'test';

语句细节解释

  • 给categories表起两个别名:sub_cat对应Fooddiary关联的子分类,parent_cat对应这个子分类的父分类,方便区分两次关联的同一张表。
  • 第一个JOIN关联Fooddiary和子分类,确保每条日记记录都能拿到对应的子分类信息。
  • 用LEFT JOIN关联父分类(而非内连接),是为了兼容顶级分类的情况——比如如果某条日记关联的是Fruit(parent为Null),此时Categorie会显示Null,避免丢失这类记录。
  • 通过AS关键字把字段重命名成你需要的输出格式:Categorie(父分类名称)、Subcategorie(子分类名称)。

原语句的问题所在

你之前的查询SELECT categories.name, categories.parent...中,categories.parent是子分类记录里存储的父ID数值,而不是父分类的名称。要拿到名称必须通过自连接,再次关联父分类的记录才能获取到对应的name字段。

示例数据验证

针对你给出的测试数据,这条语句会返回:

CategorieSubcategorieexamplecol1examplecol2
FruitBananatesta
FruitBananatestb
FruitAppletesta

完全符合你想要的输出格式。

内容的提问来源于stack exchange,提问作者cauchy000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:57:02