我有一个可以申请实习的实习生申请表。 我们有一个自动限定实习生资格的脚本。 我想找一些没有资格参加任何实习的实习生。
数据库是这样的:
Intern (Id,...)
Application (Id, status, intern_id, internship_id,...)
Internship (Id,...)
对于状态,我们已经'申请','合格','当前'和'完成' 基本上我需要对没有具有“合格”状态的应用程序的实习生进行加入请求,但我的SQL技能非常基础。
修改
我忘了提到实习生可以有几个申请,实习生只能申请一次实习,但他仍然可以申请另一个,所以这不会有效
SELECT *
FROM Intern i
INNER JOIN Application a ON i.Id = a.intern_id
WHERE a.status <> 'qualified'
答案 0 :(得分:1)
SELECT *
FROM Intern i
WHERE NOT EXISTS
(SELECT *
FROM Intern j
, Application a
WHERE j.id = a.intern_id
AND i.id = j.id
AND a.status = 'qualified')
答案 1 :(得分:1)
将状态包含在LEFT JOIN
中,并过滤非匹配项,如下所示:
SELECT ....
FROM Intern i
LEFT JOIN
Application a
ON i.Id = a.intern_id
AND a.status = 'qualified'
WHERE a.Id IS NULL
显然替换你的列列表!
答案 2 :(得分:0)
SELECT * FROM Intern
WHERE Id IN ( SELECT Intern_id FROM Application WHERE status <> 'qualified' );
答案 3 :(得分:0)
此查询应返回您要查找的内容:
SELECT *
FROM Intern i
INNER JOIN Application a ON i.Id = a.intern_id
WHERE a.status <> 'qualified'
显然,您可以仅使用您要查找的字段替换*。如果您正在寻找没有资格的实习生,我认为您不需要实习表。这假设每个实习生只有一个应用程序...如果不是这样,你可以使用这个查询:
SELECT *
FROM Intern i
WHERE i.Id IN
(
SELECT intern_id
FROM Application a
WHERE a.status <> 'qualified'
)