我是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));
任何提示赞赏。我承认我可能正在做一些非常荒谬的事情 - 所以请温柔! :)
感谢。
答案 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