2016-05-27 25 views
2

Ich führe eine SQL-Abfrage aus, um Ergebnisse mit dem Spaltenanwendungsstatus zu erhalten, die nicht S sind, um zu sagen, welche Position noch offen ist. Es gibt 3 Bewerbungsstatus U = Erfolglos, O = fortlaufend und S = erfolgreich. Das funktioniert gut. Unten ist der Code, den ich verwende.MySQL ignoriert bestimmte Zeilen?

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' 

Das Problem, das ich bin vor mit dem obigen Abfrage-Code ist, nehmen sie an, position_ID 3212 hat drei Anträge, mit einer erfolgreichen Anwendung; Ich bekomme 2 Ergebnisse für die genannte Position (ohne den erfolgreichen) so.

enter image description here

Gibt es eine Möglichkeit, es zu filtern, so dass, wenn eine Position hat bereits eine erfolgreiche Anwendung, dann werden die Zeilen mit der gleichen Position ID wird ignoriert?

+0

Ihre Abfrage wird solche Duplikate ignorieren, da sie die Spalte 'applicationstatus' in' SELECT' nicht enthält. – Andrew

+0

Eigentlich nicht, ich habe den Anwendungsstatus nachher eingefügt, um das Lesen zu erleichtern. PositionID 3212 wird auch ohne den Anwendungsstatus angezeigt. Felix 'Rat, Exist zu benutzen, hat funktioniert. – ilovetaufu

Antwort

2

eine NOT EXISTS Bedingung hinzufügen position s mit erfolgreichen Anwendungen auszuschließen:

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

Beachten Sie, dass ich Ihre Frage neu geschrieben haben sinnvolle Aliase zu verwenden. Sie sollten dies auch tun, um die Lesbarkeit und Wartbarkeit Ihres Codes zu verbessern.

+0

Das war sehr schnell! Es funktioniert auch! Vielen Dank Felix! Ich war mir der Existenzbedingung nicht bewusst, danke Felix! Wird auch anfangen, die Aliase zu verwenden, wie Sie sagten, nochmals vielen Dank! – ilovetaufu

+0

@ilovetufu Ich bin froh, dass ich helfen konnte. Bitte akzeptieren Sie diese Antwort, wenn Sie Ihr Problem gelöst haben. –