如何合并同表数据行?Inner Join去重及关联数据需求求助
解决自连接重复数据问题
原表数据
Name Type JobName Desc first SMARt first the main first first SufFold second the second, depend on first
需求目标
生成仅包含SufFold类型数据的表格,同时关联同Name下SMARt类型记录的描述,结果结构如下:
Name JobName Desc Desc2 first second the main first the second, depend on first
问题分析
自连接出现大量重复数据,核心原因是仅通过Name关联,未限定Type匹配条件,导致同Name下的不同类型记录产生笛卡尔积。
解决方案
方案1:带精准条件的自连接
在连接条件中明确限定两边的Type,确保仅匹配目标类型的记录,避免无意义的关联:
SELECT sf.Name, sf.JobName, sm.Desc AS Desc, sf.Desc AS Desc2 FROM your_table sf INNER JOIN your_table sm ON sf.Name = sm.Name AND sm.Type = 'SMARt' -- 仅关联SMARt类型的记录 WHERE sf.Type = 'SufFold'; -- 仅保留SufFold类型的主记录
方案2:子查询方式(更简洁)
用子查询直接定位对应Name的SMARt描述,确保每个SufFold记录只匹配一条目标数据:
SELECT sf.Name, sf.JobName, ( SELECT sm.Desc FROM your_table sm WHERE sm.Name = sf.Name AND sm.Type = 'SMARt' LIMIT 1 -- 若同Name有多条SMARt记录,取第一条 ) AS Desc, sf.Desc AS Desc2 FROM your_table sf WHERE sf.Type = 'SufFold';
补充说明
如果同Name下存在多条SMARt或SufFold记录,可根据实际业务逻辑添加额外条件(比如JobName匹配、时间排序等),进一步精准定位关联记录,彻底避免重复。
内容的提问来源于stack exchange,提问作者defekas17
相关产品推荐
相关产品推荐

