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)