0

我有一个实习生的申请,他们可以申请实习。我们有一个脚本可以自动使实习生合格。我想招收所有没有实习资格的实习生。

数据库是这样的:

 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'
4

4 回答 4

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')
于 2012-06-19T15:43:51.863 回答
1

在 a 中包含状态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

显然,替换您的列列表!

于 2012-06-19T15:43:52.633 回答
0
SELECT * FROM Intern
WHERE Id IN ( SELECT Intern_id FROM Application WHERE status <> 'qualified' );
于 2012-06-19T15:44:32.073 回答
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'
)
于 2012-06-19T15:46:10.760 回答