2016-05-27 3 views
2

Я запускаю SQL-запрос для получения результатов со столбцом applicationstatus, которые не являются S, чтобы указать, какая позиция все еще открыта. Существует 3 статуса приложения U = Неудачный, O = текущий и S = ​​успешно. Это прекрасно работает. Ниже приведен код, который я запускаю.MySQL игнорирует конкретные строки?

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 будут игнорироваться?

+0

Ваш запрос будет игнорировать такие дубликаты, потому что он не содержит столбец 'applicationstatus' в' SELECT'. – Andrew

+0

На самом деле это не так, я просто включил applicationstatus после этого, чтобы было легче читать. PositionID 3212 все еще показывает даже без приложения. Совет Феликса об использовании Exist работал. – ilovetaufu

ответ

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

Обратите внимание, что я переписанный запрос использовать осмысленные псевдонимы. Вы также должны сделать это, чтобы улучшить читаемость и ремонтопригодность вашего кода.

+0

Это было очень быстро! Он тоже работает! Большое спасибо Феликс! Я не знал об условиях Exist, спасибо Феликс! Также начните использовать псевдонимы, как вы заявили, еще раз спасибо! – ilovetaufu

+0

@ilovetaufu Рад, что я мог бы помочь. Примите этот ответ, если он решит вашу проблему. –

Смежные вопросы