我有一个候选人表,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
答案 0 :(得分:2)
问题在于,您的PROFILES
表格无法提供确定最新name
值的可靠方法。 PROFILES
表有两个选项:
created_date
第一个选项是最好的 - 它是显式的,这意味着列的使用是绝对明显的,并且更好地处理回溯的条目。
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);