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

MySQL中将所有一对一关联表合并为单张表(含现有表结构)

合并MySQL层级关联表为单表方案

嘿,我来帮你把这三张关联的表合并成一张单表。先理清楚它们的关联逻辑:

  • sub_category的pdmcatid和category的pdmcatid关联
  • category的pdlcatid和main_category的pdlcatid关联

虽然看起来category和main_category是一对多的关系,但我们可以用JOIN语句把所有层级的信息整合到一张表里。下面分两种场景给你方案:

场景1:只保留有完整层级的记录(子分类→分类→主分类都存在)

用INNER JOIN确保每一条记录都有对应的上级分类,只输出层级完整的数据:

SELECT 
    sc.pdcatid AS sub_category_id,
    sc.name AS sub_category_name,
    c.pdmcatid AS category_id,
    c.name AS category_name,
    mc.pdlcatid AS main_category_id,
    mc.name AS main_category_name
FROM sub_category sc
INNER JOIN category c ON sc.pdmcatid = c.pdmcatid
INNER JOIN main_category mc ON c.pdlcatid = mc.pdlcatid;

场景2:保留所有子分类,哪怕上级分类缺失

如果有些子分类没有对应的分类或主分类,用LEFT JOIN保留这些记录(缺失的字段会显示为NULL):

SELECT 
    sc.pdcatid AS sub_category_id,
    sc.name AS sub_category_name,
    c.pdmcatid AS category_id,
    c.name AS category_name,
    mc.pdlcatid AS main_category_id,
    mc.name AS main_category_name
FROM sub_category sc
LEFT JOIN category c ON sc.pdmcatid = c.pdmcatid
LEFT JOIN main_category mc ON c.pdlcatid = mc.pdlcatid;

合并后的示例结果(INNER JOIN场景)

sub_category_idsub_category_namecategory_idcategory_namemain_category_idmain_category_name
1Sub Category 11Category 11Main Category 1
2Sub Category 21Category 11Main Category 1
3Sub Category 32Category 22Main Category 2
4Sub Category 42Category 22Main Category 2
5Sub Category 53Category 32Main Category 2
6Sub Category 63Category 32Main Category 2

(注:示例中补全了main_category表的合理数据,因为你提供的内容未完整展示这张表)

内容的提问来源于stack exchange,提问作者Michael Eugene Yuen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:15:14