[英]Get latest record from second table left joined to first table
我有一个候选人表,说candidates
只有id
字段,而我离开了profiles
表。 表profiles
具有2个字段,即candidate_id
和name
。
例如表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
表有两个选项:
created_date
第一个选项是最好的-它是显式的,这意味着该列的使用是绝对显而易见的,并且可以更好地处理回溯的条目。
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.