У меня есть отношение ко многим к многим таблицам в MySQL, включающее три таблицы: tickets
, ticket_solutions
и solutions
.(Билет может иметь несколько решений, и решения могут применяться к нескольким билетам.)
Вот упрощенные структуры таблиц:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
(В этом примере все поля INT
за исключением solutions.solution
, что составляет VARCHAR
.) Поскольку некоторые заявки не завершены, они могут не иметь никаких решений.
Я написал следующий запрос:
SELECT t.id, GROUP_CONCAT(DISTINCT sol.solution SEPARATOR ', ') solutions
FROM tickets t
LEFT JOIN ticket_solutions tsol ON (tsol.ticket_id = t.id)
LEFT JOIN solutions sol ON (tsol.solution_id = sol.id)
GROUP BY t.id DESC;
Myвопрос со вторым LEFT JOIN
.В любой ситуации, когда существует запись в таблице компоновщика (ticket_solutions
) для данного тикета, всегда будет записью, которая будет соответствовать solutions
.Однако, если я попытаюсь использовать INNER JOIN
вместо этого, я больше не получу билеты, в которых нет решений.
На мой взгляд, единственное время, когда значения NULL
будут иметь место, находится в отношениях между tickets
итаблица линкеров.(Билет еще не найден.)
Должен ли я использовать LEFT JOIN
между таблицей компоновщика и solutions
, даже если в этом конкретном отношении не будет значений NULL
?
Если нет, какова рекомендуемая структура запроса?