从两个表中选择并显示结果,即使不满足条件

时间:2016-03-15 09:30:33

标签: mysql

我正在制作简单的票务系统供内部使用,而非公开。我有两个表 - ticketsticket_answers。在tickets我存储了谁开始了票,以及何时与身体,标题......等等。

ticket_answers我存储重播的人和特定的票据。所以现在在主页上我想要显示票证信息,如:票证,正文,标题,票证日期+最后重播作者,最后重播日期......

这是到目前为止的查询工作但是只有在重播时才会在页面上显示故障单。如果我创建的票证将无法显示,因为没有答案。那么如何修改查询以显示没有重放的票证?

SELECT tickets.*, ticket_answers.*
    FROM tickets, ticket_answers
    WHERE tickets.ticket_id = ticket_answers.ticket_id

    AND ticket_answers.ticket_answer_id
        IN (
              SELECT MAX( ticket_answer_id ) 
              FROM ticket_answers
              GROUP BY ticket_id
           ) 

我知道为什么这只是因为WHERE条款而只显示答案的门票,但无法弄清楚如何改变条件..

1 个答案:

答案 0 :(得分:1)

您需要左连接,而不是内连接。

SELECT tickets.*, ta.*
FROM tickets
LEFT OUTER JOIN ticket_answers
ON tickets.ticket_id = ticket_answers.ticket_id
 AND ticket_answers.ticket_answer_id  IN (SELECT MAX( ticket_answer_id ) 
                                          FROM ticket_answers
                                          GROUP BY ticket_id
                                           ) 

我认为IN语句是不必要的,您可以通过加入每个ticket_id只包含max ticket_answer的子选择来避免它:

SELECT tickets.*, ticket_answers.*
FROM tickets
LEFT OUTER JOIN (select ticket_id,max(ticket_answer_id)
                 FROM ticket_answers
                 GROUP BY ticket_id) ta
ON tickets.ticket_id = ta.ticket_id