Mysql 限制连接

Mysql 限制连接,mysql,join,Mysql,Join,我知道这个问题以前在这里讨论过,但我需要一个与其他问题不同的结果 我需要订购一些关于机构名称的结果,然后是候选人的姓氏 SELECT DISTINCT candidates.*, histories.job_title, institutions.name FROM candidates JOIN histories ON histories.candidate_id = candidates.id JOIN institutions ON histories.institution_id =

我知道这个问题以前在这里讨论过,但我需要一个与其他问题不同的结果

我需要订购一些关于机构名称的结果,然后是候选人的姓氏

SELECT DISTINCT candidates.*, histories.job_title, institutions.name
FROM candidates
JOIN histories ON histories.candidate_id = candidates.id
JOIN institutions ON histories.institution_id = institutions.id
WHERE candidates.id IN (1,3,4,6)
ORDER BY institutions.name, candidates.last_name;
我目前的问题是,这将返回所有加入历史的候选人(有当前/过去的工作),但如果我添加

AND histories.finish_date IS NULL
它不会返回没有历史记录或没有设置完成日期的候选人

谢谢,亚历克斯

子查询

SELECT DISTINCT candidates.*, 
   (SELECT institution_id
        FROM histories
        WHERE histories.candidate_id = candidates.id AND histories.finish_date IS NULL
        LIMIT 1) AS job_title       
   FROM candidates
  JOIN institutions ON histories.institution_id = institutions.id
WHERE candidates.id IN (1,3,4,6)

尝试在历史记录表上使用左连接:

SELECT DISTINCT candidates.*, histories.job_title, institutions.name
FROM candidates
LEFT JOIN histories ON histories.candidate_id = candidates.id AND histories.finish_date IS NULL
JOIN institutions ON histories.institution_id = institutions.id
WHERE candidates.id IN (1,3,4,6)
ORDER BY institutions.name, candidates.last_name;

我无法证实这一点,你得替我做。它应该返回所有候选对象及其历史记录(如果他们有历史记录)。

尝试在历史记录表上使用左连接:

SELECT DISTINCT candidates.*, histories.job_title, institutions.name
FROM candidates
LEFT JOIN histories ON histories.candidate_id = candidates.id AND histories.finish_date IS NULL
JOIN institutions ON histories.institution_id = institutions.id
WHERE candidates.id IN (1,3,4,6)
ORDER BY institutions.name, candidates.last_name;

我无法证实这一点,你得替我做。它应该返回所有候选人及其历史记录(如果他们有历史记录)。

谢谢,返回了4名候选人中的3名,但第4名有一个完成日期,即他目前没有工作。“我怎样才能让它也包括他?”亚历克斯尝试我的修改版本,没有AND子句。谢谢,我想我解释得不太清楚。我只想返回4个有最新历史记录(finish_date设置为null)的候选人,但在某些情况下,候选人可能没有历史记录,但他们仍然应该得到returned@Alex好的,试试这个版本,加入限制性的finish_date子句。谢谢你的回复,我在同一阶段得到了它,它返回3个候选者,但不返回最后一个,因为候选者没有历史记录。有没有办法在没有历史的情况下返回候选人?谢谢,这返回了4个候选人中的3个,但第4个有一个完成日期,即他目前没有工作。“我怎样才能让它也包括他?”亚历克斯尝试我的修改版本,没有AND子句。谢谢,我想我解释得不太清楚。我只想返回4个有最新历史记录(finish_date设置为null)的候选人,但在某些情况下,候选人可能没有历史记录,但他们仍然应该得到returned@Alex好的,试试这个版本,加入限制性的finish_date子句。谢谢你的回复,我在同一阶段得到了它,它返回3个候选者,但不返回最后一个,因为候选者没有历史记录。亚历克斯:我在发布我的建议后意识到它有问题,所以我删除了它。抱歉占用了你的时间。亚历克斯:我在发布我的建议后意识到它有问题,所以我把它删除了。很抱歉占用了你的时间。