MySQL: 左连接排除

MySQL: left join exclusion

我正在努力处理 MySQL 请求,我似乎无法找到正确的语法。 我的数据库设计非常简单:我有一个 table applicant,一个 table internship 和一个 table 申请。当申请人申请实习时,我在申请中插入一行 table,其中包含两个连接申请人和实习的外键。

问题:如何在知道申请人 ID 的情况下获取申请人尚未申请的所有实习的列表?

SO FAR:我想到了这个查询,但事实并非如此:

SELECT internship.* FROM internship LEFT JOIN application
ON application.id_internship = internship.id_internship
WHERE application.id_applicant IS NULL OR application.id_applicant <> 42
GROUP BY application.id_internship

如有任何帮助,我们将不胜感激。祝你有个美好的一天。

您可以使用 EXISTS 运算符在没有连接的情况下执行此操作,如下所示:

SELECT *
FROM internship i
WHERE NOT EXISTS (
    SELECT *
    FROM application a
    WHERE i.id_internship = i.id_internship AND application.id_applicant = 42
)

查询不言自明:只有 id42 的申请人没有申请的实习才会被选中。

在join中应该使用应聘者id的条件,使用=运算符,这样join的记录就是与应聘者相关联的记录,然后过滤掉join有a的实习匹配:

SELECT
  internship.*
FROM
  internship
  LEFT JOIN application ON application.id_internship = internship.id_internship AND application.id_applicant = 42
WHERE
  application.id_applicant IS NULL

不需要对查询进行分组,因为每个实习在结果中只出现一次。