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

MySQL关联两张表无重复查询并合并Region字段标记来源的问询

你要的合并Region到同一列、标注来源的需求可以通过UNION ALL纵向拼接两张表的查询结果实现,同时可以解决你原来JOIN产生的重复值问题,具体写法如下:

SELECT 
    Company,
    Kind,
    Region,
    'W表' AS 数据来源
FROM W
WHERE EXISTS (
    SELECT 1 
    FROM P 
    WHERE P.Company = W.Company 
      AND P.Facility IS NOT NULL
)
UNION ALL
SELECT 
    Company,
    Kind,
    Region,
    'P表' AS 数据来源
FROM P
WHERE P.Facility IS NOT NULL
  AND EXISTS (
    SELECT 1 
    FROM W 
    WHERE W.Company = P.Company
)
ORDER BY Company, 数据来源;

原查询重复原因说明

你原来的LEFT JOIN加WHERE条件过滤的写法本质是INNER JOIN,属于横向拼接两张表的字段,只要同个Company在任意一张表有多条匹配记录,就会生成多行结果,导致Region重复展示。
改用UNION ALL的写法是分别从两张表查询符合条件的记录,再纵向合并到同一个结果集中,新增的数据来源字段可以明确标识该行Region的所属表,且不会出现横向拼接导致的重复问题。
上述写法已经保留了你原查询中P.Facility IS NOT NULL的过滤条件,只会匹配P表中Facility不为空的关联Company,如果你有其他过滤需求,直接在两个SELECT语句的WHERE子句中添加对应规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:09:03