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

MySQL多对多关联查询结果重复问题求解

MySQL多对多关联查询结果重复问题求解

嘿,我来帮你搞定这个重复数据的问题!你遇到的核心问题是多对多关联时没找准精准的匹配条件,导致一条drug_reports记录和drug_manufacturers里的多条记录关联上,结果就重复输出了。

先给你分析下原查询的问题:你之前关联drug_manufacturers的时候,只匹配了d.id = dm.drug_id,但drug_manufacturers里同一个drug_id对应多个manufacturer_id(比如你示例里drug_id=1对应manufacturer_id=3和45),所以每条drug_reports记录会和所有同drug_id的manufacturer记录关联,自然就会返回多条重复的结果。

要解决这个问题,关键是在关联drug_manufacturers的时候,同时匹配drug_reports里的drug_id和manufacturer_id,这样就能精准定位到对应的那条counter记录。下面是调整后的正确查询:

SELECT 
    dr.id,
    dr.period_code,
    d.name AS drug_name,
    dm.counter,
    m.name AS manufacturer_name
FROM drug_reports dr
LEFT JOIN drugs d ON dr.drug_id = d.id
-- 重点:同时匹配drug_id和manufacturer_id,确保关联到唯一对应的counter
LEFT JOIN drug_manufacturers dm 
    ON dr.drug_id = dm.drug_id 
    AND dr.manufacturer_id = dm.manufacturer_id
LEFT JOIN manufacturers m ON dr.manufacturer_id = m.id
WHERE dr.period_code LIKE '%72411 IM%'

为什么这样改就对了?因为drug_manufacturers是drugs和manufacturers的中间关联表,(drug_id, manufacturer_id)这个组合是唯一的,对应一个counter值。用dr的这两个字段同时匹配dm的字段,就能保证每条drug_reports记录只关联到一条dm记录,不会出现重复。

另外你第二个查询里把匹配条件写在了和manufacturers的关联里,位置不对,而且字段名要注意(你的drug_reports里是manufacturer_id,不是mf_id),调整后就可以得到你想要的唯一结果啦。

备注:内容来源于stack exchange,提问作者Oktam Yaqubov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:44:31