SQL:如何找到基于两个字段的重复项?

我在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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...