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

如何获取同表同字段关联无重复行数据?多表关联查询求助

解决两个数据库关联问题

一、三张表关联获取匹配数据

咱们先拆解第一个需求:T1要通过otId关联T3中FORMFLAG为OT的记录,拿到对应ITEM;T2要通过pmId关联T3中FORMFLAG为PM的记录,拿到对应ITEM;最后按T1/T2的Id把这两部分数据整合起来。

根据你给的示例数据,用多表连接+表别名就能实现,具体SQL如下:

SELECT 
    t1.Id AS ID,
    t3_ot.ITEM AS OT,
    t3_pm.ITEM AS PM
FROM T1
-- 关联T3筛选出OT类型的ITEM
JOIN T3 t3_ot ON t1.otId = t3_ot.Id AND t3_ot.FORMFLAG = 'OT'
-- 关联T2,确保和T1的Id一一对应
JOIN T2 ON t1.Id = t2.Id
-- 关联T3筛选出PM类型的ITEM
JOIN T3 t3_pm ON t2.pmId = t3_pm.Id AND t3_pm.FORMFLAG = 'PM';

执行后得到的结果应该是:

IDOTPM
1DIC
2PUDC
3DOT

注:你给出的期望输出里部分PM值和数据逻辑不符,应该是笔误,你可以根据实际业务调整关联条件或筛选规则。

二、同表同字段关联且无重复行的数据获取

自关联最容易踩的坑就是出现重复行(比如A关联B和B关联A,逻辑相同但记录重复)。要避免这种情况,核心思路是通过唯一标识的大小限制,只保留单向关联的记录。

举个实际例子,假设你有一张表A,结构和数据如下:

Idcol1
110
210
320
420

如果要获取col1相同的关联数据且无重复,SQL可以这么写:

SELECT 
    a.Id AS a_id,
    a.col1,
    b.Id AS b_id
FROM A a
JOIN A b ON a.col1 = b.col1 
-- 只保留a.Id小于b.Id的组合,彻底避免双向重复
AND a.Id < b.Id;

执行后得到的结果是:

a_idcol1b_id
1102
3204

这样就不会出现(2,1)或(4,3)这类重复的关联行,保证结果唯一且符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:42:36