如何在SQL Developer中查询long_description列重复的记录并提取指定列?
解决方法
要提取满足条件的记录,你需要先定位重复的long_description值,再筛选出对应列数据不同的记录。先纠正你给出的SQL语法问题,再提供可行的查询方案:
1. 先找出重复的long_description
首先得确定哪些long_description出现了至少两次,这是后续筛选的基础:
SELECT long_description FROM your_table GROUP BY long_description HAVING COUNT(*) >= 2;
2. 筛选列数据不同的对应记录
基于上面的结果,通过自关联原表,找出同一long_description下col1/col2不同的记录:
-- 假设表有唯一主键id,用来排除同一条记录自关联 SELECT DISTINCT t1.col1, t1.col2, t1.long_description FROM your_table t1 JOIN your_table t2 ON t1.long_description = t2.long_description AND t1.id != t2.id AND (t1.col1 != t2.col1 OR t1.col2 != t2.col2);
如果表没有唯一主键,可以用窗口函数生成行号来区分不同记录:
WITH numbered_rows AS ( SELECT col1, col2, long_description, ROW_NUMBER() OVER (PARTITION BY long_description ORDER BY (SELECT NULL)) AS row_num FROM your_table ) SELECT DISTINCT nr1.col1, nr1.col2, nr1.long_description FROM numbered_rows nr1 JOIN numbered_rows nr2 ON nr1.long_description = nr2.long_description AND nr1.row_num != nr2.row_num AND (nr1.col1 != nr2.col1 OR nr1.col2 != nr2.col2);
关键说明
- 把
your_table替换成你的实际表名,id替换成表的主键字段(如果有) - 用
DISTINCT避免返回重复的记录组合 - 原SQL存在语法错误:
WHERE子句里不能直接写聚合统计,分组后的条件判断要放在HAVING里,且语句结构混乱,缺少正确的关联逻辑
内容的提问来源于stack exchange,提问作者Anne
相关产品推荐
相关产品推荐

