Sql 根据唯一属性在数据库中查找重复记录

Sql 根据唯一属性在数据库中查找重复记录,sql,oracle,duplicates,Sql,Oracle,Duplicates,我想找到输入到数据库表中的IRN的副本。以下是IRN在逻辑上唯一的属性 ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldNo 一个IRN可以有多个WELDNO,这意味着上述唯一属性可能会对一个IRN重复,当然,5个属性值中的一个必须是唯一的 现在我想知道是否有任何重复的IRN输入到系统中?如何通过sql查询找到它 注意:由于数据库设计不好,表中没有主键 这是我到目前为止尝试过的,但这并没有给出正确的结果 select * from WeldInfo

我想找到输入到数据库表中的IRN的副本。以下是IRN在逻辑上唯一的属性

ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldNo
一个IRN可以有多个WELDNO,这意味着上述唯一属性可能会对一个IRN重复,当然,5个属性值中的一个必须是唯一的

现在我想知道是否有任何重复的IRN输入到系统中?如何通过sql查询找到它

注意:由于数据库设计不好,表中没有主键

这是我到目前为止尝试过的,但这并没有给出正确的结果

select * from WeldInfo a, WeldInfo b
where a.ProjectNo = b.ProjectNo and
a.DrawingNo = b.DrawingNo and
a.DrawingRev = b.DrawingRev and
a.SpoolNo = b.SpoolNo and
a.WeldNo = b.WeldNo and
a.IrnNo <> b.IrnNo;

但我不确定,我是否理解你的问题

select  * from (
select count(*) over ( partition by ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldN) rr,t.* from WeldInfo t)
where rr > 1;
解释

with tab as (
select 1 as id, 'a' as a , 'b' as b , 'c' as c from dual
union all
select 2 , 'a', 'b', 'c' from dual
union all
select 3 , 'x', 'b', 'c' from dual
union all
select 3 , 'x', 'b', 'c' from dual
union all
select 3 , 'x', 'd', 'c' from dual
)

select t.*
      , count(*) over (partition  by a,b,c) cnt1
      , count(distinct id) over (partition  by a,b,c) cnt2
from tab t;

但我不确定,我是否理解你的问题

select  * from (
select count(*) over ( partition by ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldN) rr,t.* from WeldInfo t)
where rr > 1;
解释

with tab as (
select 1 as id, 'a' as a , 'b' as b , 'c' as c from dual
union all
select 2 , 'a', 'b', 'c' from dual
union all
select 3 , 'x', 'b', 'c' from dual
union all
select 3 , 'x', 'b', 'c' from dual
union all
select 3 , 'x', 'd', 'c' from dual
)

select t.*
      , count(*) over (partition  by a,b,c) cnt1
      , count(distinct id) over (partition  by a,b,c) cnt2
from tab t;

您没有定义duplicate。您没有定义duplicate。我尝试了这个,但它说它有语法错误。“缺少左括号”它确实返回了一些数据,但我怀疑结果是否正确。您能解释一下上面的查询是做什么的吗?查询只返回列集合ProjectNo、DrawingNo、DrawingRev、SpoolNo、,WeldN在DataSety中不是唯一的。您还可以将count*更改为countdistinct IrnNoI。我尝试了此操作,但它表示存在语法错误。“缺少左括号”它确实返回了一些数据,但我怀疑结果是否正确。您能解释一下上面的查询是做什么的吗?查询只返回列集合ProjectNo、DrawingNo、DrawingRev、SpoolNo、WeldN在DataSety中不唯一的行。您还可以将count*更改为countdistinct IrnNo