2011-08-29 81 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