MySQL - left join bei drei Tabellen

Sprint

Erfahrenes Mitglied
Hallo zusammen,

nach längerer Zeit habe ich mal wieder ein Problem mit einer Datenbankabfrage. Die bisherige Aufgabe war, bestimmte Datensätze herauszufiltern, die in einem bestimmten Zeitfenster entstanden waren. Hat soweit auch einwandfrei geklappt.

Das war die bisherige Abfrage:
SQL:
SELECT pruefung.pid, kunden.* 
FROM kunden, pruefung 
WHERE substr(pid,1,5) = '$usernr' AND pruefung.kdnr = kunden.kdnr 
AND kunden.land != 4 AND basispruefung = 0 AND testpruefung = 0 
AND (abschlusszeit > DATE_SUB(NOW(), INTERVAL 30 DAY) OR abschlusszeit = '0000-00-00 00:00:00') 
ORDER BY pid DESC;

Jetzt soll das ganze dahingehend erweitert werden, daß als zusätzliche AND Bedingung

pruefung.status > 100

OR

pruefung.status < 100 AND in einer weiteren Tabelle uidprf kein Datensatz mit uidprf.pid = Prüfung.pid vorhanden ist.

Ich hoffe, es ist klar geworden was ich meine. Ich habe jetzt schon versucht, hinter das JOIN Geheimnis zu kommen, aber irgendwie bin ich zu blöd dazu. Vielleicht erbarmt sich ja jemand und hilft mir da durch.

Schönes WE,
sprint
 
Moin sprint,

eine Möglichkeit wäre über einen zusätzlichen LEFT JOIN
SQL:
SELECT p.pid, p.status,  k.*
FROM kunden k, pruefung p
LEFT JOIN uid u on u.pid = p.pid
WHERE p.kdnr = k.kdnr
AND substr(p.pid,1,5) = '$usernr'
AND k.land != 4
AND p.basispruefung = 0 AND p.testpruefung = 0
AND (p.abschlusszeit > DATE_SUB(NOW(), INTERVAL 30 DAY) OR pabschlusszeit = '0000-00-00 00:00:00')
AND (p.status > 100 or (p.status < 100 and u.pid is null))
ORDER BY p.pid DESC;

Offen ist allerdings, was denn bei pruefung.status = 100 passieren soll - die Sätze mit "Status ist exakt 100" fallen raus, was zwar deiner Anforderung entspricht, aber sicherlich nicht der Plan war.

Grüße
Biber
 
Zuletzt bearbeitet von einem Moderator:
Hallo Biber,

vielen Dank für die Hilfe. Jetzt kommt genau das raus, was ich erwarte.

Das mit dem Status ist schon in Ordnung so. Das muß nur die Statuswerte 105, 110, 115 betreffen, aber alles, was sonst noch > 100 ist, wird durch die anderen Bedingungen rausgefiltert. Und falls wirklich mal der Wert 100 drin steht, haben wir was verkehrt gemacht.;)

Viele Grüße,
Sprint
 

Neue Beiträge

Zurück