Mysql JOIN für fehlende Datensätze

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich bin mal wieder am Verzweifeln mit den JOINs.

Es gibt drei Tabellen pruefung p, kunden k und nachprf n. In Datensätze in der n sind immer mit Einträgen in der p verbunden. Es müssen keine Datensätze in der n vorhanden sein, die zu einer in p passen, es können aber auch mehrere sein. Ich suche jetzt alle Datensätze aus p, zu denen es keine Einträge in der n gibt, oder keine Einträge in denen das Feld bub gesetzt ist.

Beispiel:
pruefung
Code:
pid
1
2
3

nachprf
Code:
pruefnr    bub
1          0
3          0
3          1

Als Ausgabe wird also 1 und 2 erwartet.

Diese Abfrage gibt mir aber auch die 3 aus, weil es einen Eintrag mit bub = 0 gibt.

SQL:
select distinct p.pid, k.firmenname 
from kunden k, pruefung p
left outer join nachprf n
    on n.pruefnr = p.pid
where substr(p.pid,1,5) = '65300' 
and p.kdnr = k.kdnr 
and p.basispruefung = 0 
and p.status > 99 
and (n.bub is null or n.bub = 0)
order by p.pid

Was mach ich falsch?
 
Du kannst es Zweistuffig machen.
Als erste herausfinden, welche pid dass bub !=1 haben und dann alle pruefungen suche, die nicht darin enthalten sind

SQL:
select distinct p.pid, k.firmenname 
from kunden k, pruefung p
where 
    p.kdnr = k.kdnr 
    and p.pid not in (
        select p1.pid
        from pruefung p1, nachprf n    
        where 
            p1.pid = n.pruefnr 
            and n.bub != 0
            substr(p1.pid,1,5) = '65300' 
            and p1.basispruefung = 0 
            and p1.status > 99 
    )
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück