如何关联Mid字段相同的两张表并查询distinct posid
解决方法:获取两张关联表中不重复的posid值
没问题,刚好有几种简洁的方式能实现你想要的结果——基于Mid字段关联两张表,取出所有不重复的posid值。先确认下你的表数据:
table1数据:
name posId Mid sam 1 10 sid 1 10 jeet 1 10
table2数据:
name posid Mid Anin 2 10 Nir 2 10 jeev 2 10
方法1:用UNION直接合并去重(最推荐)
UNION操作符本身就会自动合并结果并去除重复值,完全符合你的需求,写法也最简洁:
-- 统一列名为posid,确保结果列名一致 SELECT posId AS posid FROM table1 WHERE Mid = 10 UNION SELECT posid FROM table2 WHERE Mid = 10;
这个语句会先分别从两张表中筛选出Mid=10的posid(table1的posId别名为posid来匹配table2的字段名),再通过UNION自动去重,最终得到posid为1和2的结果。
方法2:关联表后用DISTINCT去重(适合需要显式关联的场景)
如果需要明确基于Mid字段关联两张表再去重,可以用全连接(FULL JOIN)配合DISTINCT:
SELECT DISTINCT -- 取非空的posid值,兼容其中一张表无匹配的情况 COALESCE(t1.posId, t2.posid) AS posid FROM table1 t1 FULL JOIN table2 t2 ON t1.Mid = t2.Mid WHERE t1.Mid = 10 OR t2.Mid = 10;
不过这种方法相比UNION会稍显复杂,除非你有额外的关联需求,否则更推荐第一种方法。
注意:如果你的数据库对字段大小写敏感(比如PostgreSQL默认设置),要注意table1的posId和table2的posid是不同字段,统一别名就可以避免问题啦。
内容的提问来源于stack exchange,提问作者SamarJeet Borah
相关产品推荐
相关产品推荐

