2012-07-24 79 views
1

我有兩個表。 「問題」:問題列表,「結果」用戶對這些問題的結果。查找兩個表之間連接中最舊的記錄

Table: Questions 
    ID 

Table: Results 
    ID 
    Created - When this record was added. 
    Q_ID - A FK to the Question table 

實例數據

Table: Questions 
    ID 
    ---- 
    1 
    8 
    15 
    55 

Table: Results 
    ID | Created | Q_ID 
    -------------------- 
    1 | 12:02 | 1 
    2 | 12:03 | 15 
    3 | 12:04 | 8 

我要尋找一個查詢(或兩個),這將讓我的以下信息。

  • 不具有與它相關聯的結果的問題。
  • 如果所有的問題都有結果,那麼找到最舊結果的問題。

此查詢應該返回question.id = 55,因爲它是唯一沒有結果的問題。如果question.id = 55不存在,那麼它將返回question.id = 1,因爲它對該問題具有最老的結果。

回答

3

如果LEFT JOIN兩個表,你可以使用ORDER BY條款做你需要的東西:

SELECT * 
FROM 
    questions 
    LEFT JOIN results 
     ON results.q_id = questions.id 
ORDER BY 
    ISNULL(results.id) DESC, results.created ASC 
LIMIT 1 

這將會把那些不在列表的頂部有結果的任何問題,隨後帶有結果的所有問題的列表(在「最早問題第一」的順序中)。 LIMIT 1將只顯示最高結果 - 它應該符合您的需求。

+0

您正確回答我的問題的問題(謝謝),我只是問錯了。請看下面的問題http://stackoverflow.com/questions/11624104/find-the-record-with-the-lest-amount-of-associated-records – 2012-07-24 04:20:30

+0

+1完美的解決方案! – tuxuday 2012-07-24 05:39:40

0

1不具有與它相關聯的結果的問題

select q.qid from questions q where q.qid not in (select r.qid from result r) 

2 - 找到最老的結果

select min(r.createdon) from result r 
相關問題