Using left outer join for many-to-many relationship where null is allowed

У меня есть табличное отношение "многие-ко-многим" в 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 значений?

Если нет, то какова рекомендуемая структура запроса?

5
задан marc_s 16 December 2011 в 19:57
поделиться