在两个表之间的连接中查找最旧的记录

时间:2012-07-24 03:37:27

标签: mysql sql join

我有两张桌子。 “问题”:问题列表,“结果”用户会产生这些问题。

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

2 个答案:

答案 0 :(得分: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将只显示最高结果 - 这应该与您需要的结果相符。

答案 1 :(得分: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