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
相关产品推荐
相关产品推荐

