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,因为它具有问题的最旧结果。

4

2 回答 2

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最佳结果 - 这应该符合您的需要。

于 2012-07-24T03:51:08.453 回答
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
于 2012-07-24T03:55:28.063 回答