SQL 如何查询多个表同一列的所有唯一值?
跨多表提取Name列唯一值的SQL实现
- 最通用的基础实现方式是利用SQL原生的
UNION集合运算,它会在合并多表查询结果的过程中自动完成去重,无需额外叠加去重逻辑,可直接适配无参考表依赖的场景。
对应查询语句:SELECT Name FROM table1 UNION SELECT Name FROM table2 UNION SELECT Name FROM table3; - 上述语句的执行结果完全匹配需求:三个表中重复出现的Adam、表1和表3中重复出现的David会被自动合并为单条记录,最终返回的结果集合为Adam、David、Conor、Derek、Niall、John,完全适配无排序要求的使用场景。
- 结合你提到的“所有Name值都关联到
names参考表”的场景,如果需要在提取过程中同步校验Name值的合法性,可改写为关联参考表的查询形式:SELECT n.Name FROM names n WHERE n.ID IN (SELECT ID FROM table1) UNION SELECT n.Name FROM names n WHERE n.ID IN (SELECT ID FROM table2) UNION SELECT n.Name FROM names n WHERE n.ID IN (SELECT ID FROM table3);
注意事项:不要使用
UNION ALL替代UNION实现需求。UNION ALL会全量保留所有查询返回的重复行,若要达到去重效果,需要额外嵌套一层去重逻辑(如SELECT DISTINCT Name FROM (用UNION ALL拼接多表结果的子查询) AS temp),这种写法的执行效率通常低于直接使用UNION,因为需要先拉取全量重复数据再做二次扫描去重。
内容的提问来源于stack exchange,提问作者BranOIE
相关产品推荐
相关产品推荐

