2016-03-15 57 views
2

我正在製作內部使用的簡單票據系統,而不是公開的。我有兩個表 - 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

使用左連接:F.E. http://stackoverflow.com/questions/5706437/whats-the-difference-between-inner-join-left-join-right-join-and-full-join – Mikey

回答

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_answer每個TICKET_ID這樣避免:

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 
+0

我每次都搞砸了連接。仍然無法弄清楚哪一個使用什麼時候。但最終我會得到它。第一個查詢就像魅力一樣。謝謝您的幫助! – Garg

+0

僅供參考,第二個查詢返回'Unknown table'ticket_answers'。 – Garg

+0

@Garg這是因爲你使用隱式連接語法(逗號分隔)。使用正確的語法,你將能夠更好地理解它 – sagi

相關問題