我正在努力处理一个MySQL请求,我似乎找不到正确的语法。我的数据库的设计非常简单:我有一个表申请者,一个表实习和一个表应用程序。当申请者申请实习时,我在应用程序表中插入一行,其中包含连接申请者和实习人员的两个外键。
问题:知道申请人的身份,我如何才能得到申请人尚未申请的所有实习职位的清单?
到目前为止:我想出了这个查询,但不是这样的:
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任何帮助都将不胜感激。祝你今天愉快。

发布于 2015-03-28 20:47:38
您应该在join中使用申请者id的条件,并使用=操作符,这样连接的记录就是连接到申请者的记录,然后筛选出与join匹配的实习职位:
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没有必要将查询分组,因为每次实习只在结果中进行一次。
发布于 2015-03-28 20:43:33
您可以使用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 of 42的申请人没有申请的实习才会被选中。
https://stackoverflow.com/questions/29322344
复制相似问题