Ho una relazione tabella molti-a-molti in MySQL che coinvolge tre tabelle: tickets
, ticket_solutions
e solutions
. (. Il biglietto può avere più soluzioni, e le soluzioni applicabili a più biglietti)Uso del join esterno sinistro per la relazione molti-a-molti dove è consentito il valore zero
Ecco le strutture delle tabelle, semplificate:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
(In questo esempio, tutti i campi sono INT
tranne solutions.solution
che è VARCHAR
.) Poiché alcuni biglietti non sono completati, potrebbero non avere soluzioni.
ho scritto la seguente query:
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;
La mia domanda è con la seconda LEFT JOIN
. In qualsiasi situazione in cui esiste una voce nella tabella del linker (ticket_solutions
) per un determinato ticket, ci sarà sempre un record corrispondente a solutions
. Tuttavia, se provo a utilizzare uno INNER JOIN
, non ottengo più ticket privi di soluzioni.
A mio avviso, l'unica volta che i valori NULL
si verificheranno è nella relazione tra tickets
e la tabella del linker. (Biglietto senza soluzioni ancora.)
Devo utilizzare un LEFT JOIN
tra la tabella del linker e solutions
anche se non ci saranno valori NULL
in quella particolare relazione?
In caso contrario, qual è la struttura di query consigliata?
Questo è esattamente quello che stavo cercando. Grazie. – JYelton