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

左连接层级表产生重复行的问题与解决思路

关联层级类别表时重复记录问题及优化方案

现有两张表:wallet_balance_history(钱包余额历史表)和层级结构的categories(类别表)。当查询wallet_balance_history关联顶级父类别时结果正常,但查询下级类别时,由于对应category_id存在多个子category_id,会导致同一条wallet_balance_history记录被重复输出。

示例表结构

wallet_balance_history表

IDcategory_id
14
24

categories表

IDparent_idname
4nullx1
54x1.1
64x1.2

问题复现SQL

select 
    wbh.id id, c1.name c1, c2.name c2, c3.name c3
from
    wallets_balance_history wbh 
left join 
    categories c1 on wbh.category_id = c1.id
left join 
    categories c2 on c2.parent_id = c1.id
left join 
    categories c3 on c3.parent_id = c2.id
where 
    wbh.id = 1;

查询结果(出现重复)

IDc1c2
1x1x1.1
1x1x1.2

需求

要求每个wallet_balance_history行(按ID唯一)最多对应一组c1、c2、c3值,避免重复。

优化方案

  • 方案1:存储最下层子类别ID
    将wallet_balance_history.category_id存储为最底层的子类别ID,通过向上追溯获取各级父类别。但此方案无法固定类别层级,会引入其他复杂度。
  • 方案2:创建桥接表
    新增一张桥接表,建立wallet_balance_history.id与对应所有层级类别/子类别之间的映射关系,通过桥接表关联查询避免重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:12:13