在MySQL中,我有一個多對多表關係,涉及三個表:tickets
,ticket_solutions
和solutions
。 (一種票證可能有多種解決方案,和解決方案應用到多個門票)使用左外部聯接實現允許空值的多對多關係
下面是表結構,簡化了:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
(在這個例子中,所有字段都除了solutions.solution
是VARCHAR
INT
。 )由於一些票未完成,他們可能沒有任何解決方案。
我已經寫了下面的查詢:
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
值將發生的唯一時間是在tickets
和鏈接器表之間的關係。 (沒有任何解決方案的票證)
我必須在鏈接器表和solutions
之間使用LEFT JOIN
,即使在該特定關係中不會有NULL
值?
如果不是,建議的查詢結構是什麼?
這正是我一直在尋找。謝謝。 – JYelton 2011-12-16 19:41:29