SQL:如何找到基于两个字段的重复项?
发布时间:2020-12-12 07:03:29 所属栏目:MsSql教程 来源:网络整理
导读:我在Oracle数据库表中有行,对于两个字段的组合应该是唯一的,但是表上没有设置唯一的约束,因此我需要使用SQL查找违反约束的所有行。不幸的是,我的微软SQL技能不能完成任务。 我的表有三列是相关的:entity_id,station_id和obs_year。对于每一行,station_
我在Oracle数据库表中有行,对于两个字段的组合应该是唯一的,但是表上没有设置唯一的约束,因此我需要使用SQL查找违反约束的所有行。不幸的是,我的微软SQL技能不能完成任务。
我的表有三列是相关的:entity_id,station_id和obs_year。对于每一行,station_id和obs_year的组合应该是唯一的,我想通过用SQL查询来清除是否有违反此行的行。 我已经尝试了以下SQL(建议this previous question),但它不适用于我(我得到ORA-00918列模糊定义): SELECT entity_id,station_id,obs_year FROM mytable t1 INNER JOIN ( SELECT entity_id,obs_year FROM mytable GROUP BY entity_id,obs_year HAVING COUNT(*) > 1) dupes ON t1.station_id = dupes.station_id AND t1.obs_year = dupes.obs_year 有人可以建议我做错什么,和/或如何解决这个问题? 解决方法SELECT * FROM ( SELECT t.*,ROW_NUMBER() OVER (PARTITION BY station_id,obs_year ORDER BY entity_id) AS rn FROM mytable t ) WHERE rn > 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |