2016-07-19 24 views
0

我想查找输入到数据库表中的IRN#的重复项。以下是IRN的独特属性(逻辑唯一)。在唯一属性中查找数据库中的重复记录

ProjectNo, DrawingNo, DrawingRev, SpoolNo, WeldNo 

的IRN可以有多个WeldNos意味着上述独特的属性可以重复用于一个IRN#(与5个属性值当然之一必须是唯一的)。

现在我试图找出是否有任何重复的IRNs进入系统或没有?我如何通过sql查询找到?

P.S:由于数据库的设计不好,没有在表上没有主键..

这是我迄今为止尝试过,但这并不给出正确的结果。

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; 
+0

您没有定义重复。 – sagi

回答

2

但我不知道,我理解你的问题。

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; 
+0

我试过这个,但它说它有语法错误。'丢掉左括号' – WAQ

+0

它现在应该可以工作 –

+0

它肯定会返回一些数据,但我怀疑结果是正确的。你能解释一下上面的查询是什么吗? – WAQ