使用左外连接进行允许为null的多对多关系

JYe*_*ton 5 mysql many-to-many

我在MySQL涉及三个表一个多一对多表关系tickets,ticket_solutionssolutions.(票证可能有多个解决方案,解决方案适用于多张票证.)

这是表结构,简化:

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在该特定关系中没有值吗?

如果没有,推荐的查询结构是什么?

Joe*_*lli 7

试试这种方式:

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)