我正在努力处理MySQL请求,我似乎无法找到正确的语法。 我的数据库的设计非常简单:我有一个表申请人,一个表实习和一个表应用程序。当申请人申请实习时,我会在申请表中插入一行,其中包含两个连接申请人和实习的外键。
问题:如何知道申请人的身份证明,我如何获得申请人尚未申请的所有实习名单?
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
非常感谢任何帮助。祝你有个美好的一天。
答案 0 :(得分:1)
您可以使用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
{{1}}申请人不适用的实习机会。
答案 1 :(得分:1)
您应该在联接中使用申请人ID的条件并使用=
运算符,以便连接的记录是与申请人相关的记录,然后筛选出联接匹配的实习:
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
无需对查询进行分组,因为每次实习仅在结果中出现一次。