如何在同一查询中获取产品及其所属分组与父分组?
解决方案:查询产品、直接分组及父分组
没问题,我来帮你搞定这个查询!首先咱们先明确下数据库表的结构(根据你的描述推导,你可以根据实际表名/字段名调整):
假设的表结构
我猜你的数据库里应该有两张核心表:
products(产品表):存储产品基本信息,关键字段包括:product_id:产品唯一IDproduct_name:产品名称category_id:关联的直接分组ID
categories(分组表):存储分组层级信息,关键字段包括:category_id:分组唯一IDcategory_name:分组名称parent_category_id:关联的父分组ID(顶级分组的这个字段可以设为NULL或者0)
举个符合你例子的样本数据:
products表数据
| product_id | product_name | category_id |
|---|---|---|
| 1 | 伏特加 | 2 |
| 2 | 杰克丹尼 | 2 |
| 3 | 百事可乐 | 3 |
| 4 | 果汁 | 3 |
categories表数据
| category_id | category_name | parent_category_id |
|---|---|---|
| 1 | 饮品 | NULL |
| 2 | 含酒精饮品 | 1 |
| 3 | 无酒精饮品 | 1 |
最终查询语句
我们只需要两次关联分组表:一次获取产品的直接分组,一次获取该分组的父分组。用LEFT JOIN可以兼容顶级分组(无父分组)的情况,避免数据丢失:
SELECT p.product_name AS 产品名称, direct_cat.category_name AS 直接关联分组, parent_cat.category_name AS 父分组 FROM products p -- 关联直接分组 JOIN categories direct_cat ON p.category_id = direct_cat.category_id -- 关联父分组(用LEFT JOIN允许父分组为NULL) LEFT JOIN categories parent_cat ON direct_cat.parent_category_id = parent_cat.category_id;
查询结果示例
执行上面的SQL后,你会得到这样的结果:
| 产品名称 | 直接关联分组 | 父分组 |
|---|---|---|
| 伏特加 | 含酒精饮品 | 饮品 |
| 杰克丹尼 | 含酒精饮品 | 饮品 |
| 百事可乐 | 无酒精饮品 | 饮品 |
| 果汁 | 无酒精饮品 | 饮品 |
如果你的实际表名或字段名和我假设的不一样,只需要把对应的名称替换掉就行啦!
内容的提问来源于stack exchange,提问作者billy_56
相关产品推荐
相关产品推荐

