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
)
查询不言自明:只有 id
或 42
的申请人没有申请的实习才会被选中。
在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
不需要对查询进行分组,因为每个实习在结果中只出现一次。
我正在努力处理 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
)
查询不言自明:只有 id
或 42
的申请人没有申请的实习才会被选中。
在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
不需要对查询进行分组,因为每个实习在结果中只出现一次。