从第二张表中获取最新记录,加入第一张表

时间:2010-06-15 08:10:36

标签: sql mysql

我有一个候选人表,candidates只有id字段,我离开了加入profiles表。表格profiles有2个字段,即candidate_id& name

e.g。表candidates

 id
 ----
 1
 2

和表profiles

 candidate_id      name
 ----------------------------
      1           Foobar
      1           Foobar2
      2           Foobar3

我想在单个查询中找到候选人的最新名称,如下所示:

SELECT C.id, P.name 
  FROM   candidates C
LEFT JOIN profiles P ON P.candidate_id = C.id 
GROUP BY C.id 
ORDER BY P.name;

但是这个查询返回:

1     Foobar
2     Foobar3

......而不是:

1     Foobar2
2     Foobar3

2 个答案:

答案 0 :(得分:2)

问题在于,您的PROFILES表格无法提供确定最新name值的可靠方法。 PROFILES表有两个选项:

  1. 添加日期时间列IE:created_date
  2. 定义auto_increment列
  3. 第一个选项是最好的 - 它是显式的,这意味着列的使用是绝对明显的,并且更好地处理回溯的条目。

    ALTER TABLE PROFILES ADD COLUMN created_date DATETIME
    

    如果在没有提供任何值的情况下插入记录时希望值为default to the current date & time,请在结尾处添加以下内容:

    DEFAULT CURRENT_TIMESTAMP
    

    有了这些,您将使用以下内容来获得所需的结果:

       SELECT c.id, 
              p.name 
         FROM CANDIDATES c
    LEFT JOIN PROFILES p ON p.candidate_id = c.id 
         JOIN (SELECT x.candidate_id,
                      MAX(x.created_date) AS max_date
                 FROM PROFILES x
             GROUP BY x.candidate_id) y ON y.candidate_id = p.candidate_id
                                       AND y.max_date = p.created_date
     GROUP BY c.id 
     ORDER BY p.name
    

答案 1 :(得分:-1)

使用子查询:

SELECT C.id, (SELECT P.name FROM profiles P WHERE P.candidate_id = C.id ORDER BY P.name LIMIT 1);