SQL Developer中如何在重复数据查询结果中包含全表字段?
解决SQL重复项查询并显示全字段的问题
你之前的SQL语法有误,子查询没和原表建立关联关系,所以无法正确返回结果。下面是两种最优的实现方式:
方法一:内连接(INNER JOIN)关联子查询
通过子查询找出重复的ID和Acc_Num,再和原表关联,就能拿到这些重复项对应的所有字段:
SELECT t1.* FROM Table1 t1 INNER JOIN ( -- 找出重复的ID和Acc_Num SELECT ID, Acc_Num FROM Table1 WHERE PROCESS_DATE = '30-Apr-2025' GROUP BY ID, Acc_Num HAVING COUNT(1) > 1 ) t2 ON t1.ID = t2.ID AND t1.Acc_Num = t2.Acc_Num WHERE t1.PROCESS_DATE = '30-Apr-2025' -- 限定日期,避免无关数据 ORDER BY t1.ID;
方法二:窗口函数(更直观)
用窗口函数直接统计每条记录的重复次数,再筛选出重复项,写法更简洁,还能看到重复次数:
SELECT * FROM ( SELECT *, -- 按ID和Acc_Num分组统计重复次数 COUNT(1) OVER(PARTITION BY ID, Acc_Num) AS duplicate_count FROM Table1 WHERE PROCESS_DATE = '30-Apr-2025' ) t WHERE duplicate_count > 1 -- 只保留重复的记录 ORDER BY ID;
两种方法都能满足需求:窗口函数的写法更易读,适合新手理解;内连接的方式在数据量极大时,部分数据库中性能表现更优,可以根据实际场景选择。
内容的提问来源于stack exchange,提问作者Louise13
相关产品推荐
相关产品推荐

