MySQL忽略特定行?

时间:2016-05-27 05:22:49

标签: mysql sql

我正在运行一个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个上述位置的结果(不包括成功的位置)。

enter image description here

有没有办法过滤它,以便如果某个位置已经有一个成功的应用程序,那么具有相同位置ID的行将被忽略?

1 个答案:

答案 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'
    )

请注意,我已重写您的查询以使用有意义的别名。您还应该这样做以提高代码的可读性和可维护性。