У меня есть табличное отношение "многие-ко-многим" в MySQL, включающее три таблицы: tickets
, ticket_solutions
, and 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;
Мой вопрос заключается во втором LEFT JOIN
. В любой ситуации, когда существует запись в таблице компоновщика (ticket_solutions
) для данного билета, всегда найдется запись для соответствия в solutions
. Однако если я попытаюсь использовать INNER JOIN
вместо этого, я больше не получу билеты, у которых нет решений.
По моему мнению, единственный случай, когда значения NULL
будут встречаться в отношениях между тикетами
и таблицей linker. (Билет без каких-либо решений.)
Должен ли я использовать LEFT JOIN
между таблицей linker и solutions
, даже если в этом конкретном отношении не будет NULL
значений?
Если нет, то какова рекомендуемая структура запроса?