繁体   English   中英

从连接到第一张桌子的第二张桌子中获取最新记录

[英]Get latest record from second table left joined to first table

我有一个候选人表,说candidates只有id字段,而我离开了profiles表。 profiles具有2个字段,即candidate_idname

例如表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

问题是您的PROFILES表没有提供可靠的方法来弄清最新的name值是什么。 PROFILES表有两个选项:

  1. 添加日期时间列IE: created_date
  2. 定义一个auto_increment列

第一个选项是最好的-它是显式的,这意味着该列的使用是绝对显而易见的,并且可以更好地处理回溯的条目。

ALTER TABLE PROFILES ADD COLUMN created_date DATETIME

如果在未提供任何值的情况下插入记录时,如果希望该值默认为当前日期和时间 ,请在末尾添加以下内容:

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

使用子查询:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM