Mam relację wiele do wielu w MySQL z udziałem trzech tabel: tickets
, ticket_solutions
i solutions
. (. Bilet może mieć różne rozwiązania i rozwiązania zastosować do wielu biletów)Używanie lewego sprzężenia zewnętrznego dla relacji wiele do wielu gdzie dozwolona jest wartość zerowa
Oto struktury tabeli, uproszczone:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
(W tym przykładzie, wszystkie pola są INT
wyjątkiem solutions.solution
która VARCHAR
. Ponieważ niektóre bilety nie są ukończone, mogą nie mieć żadnych rozwiązań.
Pisałem następujące zapytanie:
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;
Moje pytanie leży po drugiej LEFT JOIN
. W każdej sytuacji, w której istnieje wpis w tabeli linkerów (ticket_solutions
) dla danego biletu, będzie zawsze rekordem do dopasowania w solutions
. Jednak jeśli spróbuję użyć numeru INNER JOIN
, nie otrzymam już biletów, w których brakuje rozwiązań.
Do mojego myślenia, jedynymi wartościami, które pojawią się NULL
, jest stosunek między tickets
a tabelą linkera. (Bilet bez żadnych rozwiązań.)
Czy muszę używać LEFT JOIN
między tabelą linkera a solutions
, mimo że w tej konkretnej relacji nie będzie wartości NULL
?
Jeśli nie, jaka jest zalecana struktura zapytania?
To jest dokładnie to, czego szukałem. Dziękuję Ci. – JYelton