#mysql #sql
#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))
— Я понимаю, что мне здесь не нужен подзапрос — это был всего лишь первый шаг.. в любом случае, проблема в том, что мой запрос не показывает мне все заявки (я хочу, чтобы в моем выводе были возвращены все записи для заявок, независимо от того, есть ли у них блокирующие заявки в поле блокирующий запрос).
Итак, я решил, что мне нужно какое-то левое соединение. Вот тут я совершенно запутался.
Я пробовал это, но я получаю: Неизвестный столбец ‘blockers.id ‘ в предложении ‘on’
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));
Любые советы приветствуются. Я признаю, что, вероятно, делаю какие-то довольно нелепые вещи — поэтому, пожалуйста, будьте нежны ! 🙂
Спасибо.
Ответ №1:
Похоже, что есть некоторые остатки от предыдущего запроса. Вероятно, должно быть
group by j2.pkey) blockers
left join jiraissue j3 on blockers.id = j3.id
Комментарии:
1. Хорошо — этот sql будет выполнен, но по-прежнему показывает только результаты из j3, где они совпадают с блокировщиками. Чего мне здесь не хватает? Я хочу получить все результаты j3, включая то, где они совпадают.
2. Может быть, правое соединение? Нелегко сказать без таблиц.
Ответ №2:
Я думаю, ваша проблема в том, что ваш вложенный запрос не выдает имя столбца id
, оно просто есть j2.id
, и MySQL не удаляет j2
префикс. Попробуйте изменить
select js.id, group_concat /*...*/
Для
select j2.id as id, group_concat /*...*/
Ответ №3:
Мне этот бит кажется неуместным:
group by j2.pkey) blockers, jiraissue j3
Почему бы просто не:
group by j2.pkey) blockers
?