2016-05-30 37 views
0

Ich habe eine SQL-Abfrage, wo ich versuche, Jobs zu finden, die keinen Status haben, der DEL entspricht. Jobs könnten viele Zustände zum Beispiel haben, wie dieser Job:Überprüfen Sie die Datenbank, ob ein bestimmtes Feld bereits existiert

enter image description here

Also versuche ich, eine Abfrage zu erstellen, Arbeit zu finden, die nicht den DEL Status enthalten.

select j.* 
from job_new j 
left join jobstat js on js.jobid=j.id 
where js.Status NOT IN('DEL') 
Group by j.ID 

Aber diese Abfrage gibt noch Jobs, die einen DEL Status haben. Ich brauche die Abfrage, um jede Zeile in der jobstat Tabelle zu überprüfen und zu überprüfen, ob DEL existiert.

Antwort

0

Das Problem ist, dass Sie mehr als einen Status für den gleichen Job haben. Deshalb zeigt Status not in ('DEL') alle Zeilen mit dem Status! = 'DEL' an, ohne andere Zeilen desselben Jobs zu berücksichtigen, die status = 'DEL' haben.

für Ihren Dies sollte funktionieren:

select j.* 
from job_new j 
left join (select jobid, sum(if(Status='DEL',1,0)) as DEL from jobstat group by jobid having DEL=0) as js on js.jobid=j.id 
Group by j.ID 

Wir auf einem vorbereiteten Auswahl kommen aus BESTA, die Arbeitsplätze umfasst nur die in BESTA in jeder Zeile nicht Status = ‚DEL‘.

+0

Entschuldigung, aber es gibt immer noch Aufträge mit 'DEL' – user123456789

+0

sollte es nicht. aber ich erwartete, dass das Tabellenbeispiel für Jobstat war. Wie lautet der Name der von Ihnen geposteten Tabelle? und könnten Sie ein Beispiel für die andere Tabelle veröffentlichen, der Sie beitreten? – iLikeMySql

Verwandte Themen