2011-08-29 3 views
-1

이유를 모르는 레코드를 반복하는 SQL 문이 있습니다! 당신이보기 B 또는 C에 중복 키를 가지고 있기 때문에SQL 문 결과에 문제가 있습니다.

select floor((a.created-c.created)*24) 
     || ' HOURS ' || 
     mod(floor((a.created-c.created)*24*60),60) 
    || ' MINUTES ' ,a.pkey as AssignedGroupResponseTime,a.pkey,d.newString as AssignedGroup 

from 
(
select g.created,g.issueid as groupid1, ji.pkey ,ci.newString 
from changegroup g 
join jiraissue ji on (ji.id = g.issueid) 
join changeitem ci on (ci.groupid = g.id) 
where (g.created, ji.pkey) in (
select min(g.created) ,ji.pkey 
from changegroup g 
join changeitem ci on (ci.groupid = g.id) 
join jiraissue ji on (ji.id = g.issueid) 
join project p on (p.id = ji.project) 
join priority pr on (pr.id = ji.priority) 
where ci.field = 'Group' 
and ci.oldString like 'Triage' 
and p.pname = 'Change Management' 
and pr.pname='P3' 
and ji.created between '01/03/2011' and '16/08/2011' 
group by ji.pkey 
)) a 
left join (
select ji.created, ji.id as groupid2 ,ji.pkey ,ci.newString 
    from jiraissue ji 
    join changegroup g on (g.issueid = ji.id) 
    join changeitem ci on (ci.groupid = g.id) 
    join project p on (p.id = ji.project) 
    where p.pname = 'Change Management' 
    and ci.field = 'Group' 
    and ci.oldString like 'Triage' 
    and ji.created between '01/03/2011' and '16/08/2011' 
) b ON (a.pkey = b.pkey) 
left join (
    select g.created, g.issueid as groupid1 ,ji.pkey ,ci.newString 
    from changegroup g 
    join jiraissue ji on (ji.id = g.issueid) 
    join changeitem ci on (ci.groupid = g.id) 
    where (g.created, ji.pkey) in (
    select min(g.created) ,ji.pkey 
    from changegroup g 
    join changeitem ci on (ci.groupid = g.id) 
    join jiraissue ji on (ji.id = g.issueid) 
    join project p on (p.id = ji.project) 
    join priority pr on (pr.id = ji.priority) 
    where ci.field='assignee' 
    and ci.newString is not NULL 
    and p.pname = 'Change Management' 
    and pr.pname='P3' 
    and ji.created between '01/03/2011' and '16/08/2011' 
    group by ji.pkey)) c 
    ON (c.pkey = a.pkey) 
left join (
    select g.created, g.issueid as groupid1 ,ji.pkey ,ci.newString 
    from changegroup g 
    join jiraissue ji on (ji.id = g.issueid) 
    join changeitem ci on (ci.groupid = g.id) 
    where (g.created, ji.pkey) in (
    select min(g.created) ,ji.pkey 
    from changegroup g 
    join changeitem ci on (ci.groupid = g.id) 
    join jiraissue ji on (ji.id = g.issueid) 
    join project p on (p.id = ji.project) 
    join priority pr on (pr.id = ji.priority) 
    where ci.field='assigned group' 
    and ci.newString is not NULL 
    and p.pname = 'Change Management' 
    and pr.pname='P3' 
    and ji.created between '01/03/2011' and '16/08/2011' 
    group by ji.pkey)) d 
    ON (d.pkey = c.pkey); 
+0

이 질문은 폐회되고있는 것으로 의심됩니다. –

+1

예, 불충분 한 의문 사항이 있습니다. 당신은 충분히 자신을 파고 그 후에 질문을 만들어야합니다. –

답변

2

이것은 :

이 내 문입니다. 이보기를 개별적으로 실행하고 잘못된 것을 볼 수 있습니다 (중복 키 값). 해당 뷰에는 조인이 있습니다. 약한 조건으로 거의 한 조인이 이루어집니다. 즉, 하나의 조건에 대해 중복되는 일치 항목이 있음을 의미합니다.

+1

+1 중복 행은 거의 항상 망가진 조인의 결과입니다. 누락 된 기준은 카티 션 곱으로 이어집니다. – APC