我正在运行一个SQL查询来获取带有applicationstatus列的结果,该列不能告诉哪个位置仍处于打开状态。有3个应用程序状态U =不成功,O =正在进行,S =成功。这很好用。下面是我正在运行的代码。
SELECT DISTINCT position.position_ID, Title, EmployerName, Industry
FROM position
JOIN application ON position.position_id = application.position_id
JOIN employer ON position.employer_id = employer.employer_id
WHERE applicationstatus != 'S'
我面临的问题是上面的查询代码,让我们假设position_ID 3212收到了3个申请,其中一个申请成功;我得到2个上述位置的结果(不包括成功的位置)。
有没有办法过滤它,以便如果某个位置已经有一个成功的应用程序,那么具有相同位置ID的行将被忽略?
答案 0 :(得分:2)
添加NOT EXISTS
条件以排除成功申请的position
:
SELECT DISTINCT
p.position_ID,
Title,
EmployerName,
Industry
FROM position p
JOIN application a
ON p.position_id = a.position_id
JOIN employer e
ON p.employer_id = e.employer_id
WHERE
applicationstatus != 'S'
AND NOT EXISTS(
SELECT 1
FROM application
WHERE
position_id = a.position_id
AND applicationstatus = 'S'
)
请注意,我已重写您的查询以使用有意义的别名。您还应该这样做以提高代码的可读性和可维护性。