我正在制作简单的票务系统供内部使用,而非公开。我有两个表 - tickets
和ticket_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
条款而只显示答案的门票,但无法弄清楚如何改变条件..
答案 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