2011-08-29 52 views
-1

我有一個sql語句重複記錄幾個時間我不知道爲什麼!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

這是因爲你對視圖B或C重複鍵。 你可以單獨運行這個視圖,看看有什麼不對(重複鍵值)。 在該視圖中,您已加入。幾乎一個加入是以弱條件進行的。這意味着你有一個條件重複匹配。

+1

+1重複的行幾乎總是由於拙劣的連接導致:缺少一個導致笛卡爾積的標準。 – APC