使用左连接和group_concat时遇到问题

时间:2011-05-07 19:16:18

标签: mysql sql

我是mysql的新手 - 为新手问题道歉。我研究了一下,但由于缺乏一般的理解,我的大脑在这一点上感觉就像一个椒盐脆饼。

我想要做的是输出票证列表 - 此输出有几个字段,包括用于阻止票证的字段。以下SQL将或多或少地提供我想要的内容:

select j3.pkey, j3.summary, blockers.blocking_tickets, j3.reporter, j3.assignee,     j3.created, j3.resolutiondate

from 
    (select j2.id, group_concat(j1.pkey) blocking_tickets
    from jiraissue j1, issuelink, issuelinktype, jiraissue j2 
    where j1.id=issuelink.SOURCE 
    and j2.id=issuelink.DESTINATION 
    and issuelinktype.id=issuelink.linktype
    and  issuelinktype.INWARD = 'is blocked by'
    group by j2.pkey) blockers, jiraissue j3

where 
blockers.id = j3.id
AND
((DATE_SUB(CURDATE(),INTERVAL 24 Hour) <= j3.resolutiondate) or (DATE_SUB(CURDATE(),INTERVAL 24 Hour) <= j3.created))

- 我意识到我在这里不需要一个子查询 - 这只是一个踩踏石头..无论如何,问题是我的查询没有显示所有的门票(在我的输出中我想要的是为票证返回所有记录器,无论他们是否在阻止票据字段中都有阻止票证。

所以,我想我需要某种左连接。这是我完全困惑的地方。

我试过这个,但我得到:'on clause'

中的未知列'blockers.id'
select j3.pkey, j3.summary, blockers.blocking_tickets, j3.reporter, j3.assignee, j3.created, j3.resolutiondate

from 
(select j2.id, group_concat(j1.pkey) blocking_tickets
    from jiraissue j1, issuelink, issuelinktype, jiraissue j2 
    where j1.id=issuelink.SOURCE 
    and j2.id=issuelink.DESTINATION 
    and issuelinktype.id=issuelink.linktype
    and  issuelinktype.INWARD = 'is blocked by'
    group by j2.pkey) blockers, jiraissue j3

left join jiraissue on blockers.id = jiraissue.id

where ((DATE_SUB(CURDATE(),INTERVAL 24 Hour) <= j3.resolutiondate) or (DATE_SUB(CURDATE(),INTERVAL 24 Hour) <= j3.created));

任何提示赞赏。我承认我可能正在做一些非常荒谬的事情 - 所以请温柔! :)

感谢。

3 个答案:

答案 0 :(得分:0)

我认为您的问题是您的嵌套查询不会生成列名id,它只有j2.id而且MySQL不会剥离j2前缀。尝试更改

select js.id, group_concat /*...*/

select j2.id as id, group_concat /*...*/

答案 1 :(得分:0)

对我而言,这一点似乎不合适:

group by j2.pkey) blockers, jiraissue j3

为什么不简单:

group by j2.pkey) blockers

答案 2 :(得分:0)

看起来上次查询中有一些剩菜。 可能应该是

    group by j2.pkey) blockers

left join jiraissue j3 on blockers.id = j3.id