如何使用JOIN合并两张表并去除重复数据?
解决JOIN后出现重复条目的问题
你的问题根源在于table1中同一个col_id对应多条col_name记录,直接JOIN会生成笛卡尔积,导致同一个col_id出现多条结果。DISTINCT无效是因为这些结果的col_name不同,不符合去重条件。
以下是几种可行的解决办法:
方法一:使用窗口函数筛选每组第一条记录
通过ROW_NUMBER()给每个col_id分组内的记录排序,只保留每组的第一条(可以根据需求调整排序规则):
WITH ranked_table1 AS ( SELECT col_id, col_name, -- 按col_name升序排序取每组第一条,也可替换为其他排序字段 ROW_NUMBER() OVER (PARTITION BY col_id ORDER BY col_name) AS rn FROM table1 ) SELECT t2.col_id, t2.col_status, rt1.col_name FROM table2 t2 JOIN ranked_table1 rt1 ON t2.col_id = rt1.col_id WHERE rt1.rn = 1;
方法二:聚合函数取任意一个col_name
如果只需要每个col_id对应的任意一个col_name,可以用MIN()或MAX()聚合函数:
SELECT t2.col_id, t2.col_status, MIN(t1.col_name) AS col_name -- 用MAX()也可以,按需选择 FROM table2 t2 JOIN table1 t1 ON t2.col_id = t1.col_id GROUP BY t2.col_id, t2.col_status;
方法三:子查询匹配单条记录
用子查询直接为每个col_id返回一条col_name:
SELECT t2.col_id, t2.col_status, (SELECT TOP 1 col_name FROM table1 t1 WHERE t1.col_id = t2.col_id ORDER BY col_name) AS col_name FROM table2 t2;
注:TOP 1适用于SQL Server,MySQL和PostgreSQL替换为LIMIT 1。
内容的提问来源于stack exchange,提问作者user3335796
相关产品推荐
相关产品推荐

