JYe*_*ton 5 mysql many-to-many
我在MySQL涉及三个表一个多一对多表关系tickets,ticket_solutions和solutions.(票证可能有多个解决方案,解决方案适用于多张票证.)
这是表结构,简化:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
Run Code Online (Sandbox Code Playgroud)
(在这个例子中,所有的字段都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;
Run Code Online (Sandbox Code Playgroud)
我的问题在于第二个问题LEFT JOIN.在ticket_solutions给定票证的链接器表()中存在条目的任何情况下,总会有匹配的记录solutions.但是,如果我尝试使用INNER JOIN,我不再获得缺乏解决方案的门票.
根据我的想法,NULL值发生的唯一时间是tickets链接器表和链接器表之间的关系.(没有任何解决方案的门票.)
我必须LEFT JOIN在链接器表之间使用,solutions即使NULL在该特定关系中没有值吗?
如果没有,推荐的查询结构是什么?
试试这种方式:
SELECT t.id, GROUP_CONCAT(DISTINCT sol.solution SEPARATOR ', ') solutions
FROM tickets t
LEFT JOIN ticket_solutions tsol
INNER JOIN solutions sol
ON (tsol.solution_id = sol.id)
ON (tsol.ticket_id = t.id)
GROUP BY t.id DESC;
Run Code Online (Sandbox Code Playgroud)