Abfrage mitleft Join

Abfrage mitleft Join

am 09.01.2008 10:00:30 von Stephan Dreisbach

Hallo,

left Join erschließt sich mir einfach nicht :-( oder ich sehe den
Wald vor lauter Bäumen nicht:

Tabelle Lehrer hat die Spalten Nr, Schulnr, LMail
Tabelle Abrechnung die Spalten Lehrernr, Schulnr und Lizenz

Ich möchte jetzt prüfen, die Mailadresse irgendwer@wo.de in der
Tabelle Lehrer vorkommt und wenn ja, ob die zugehörige L.Nr oder
L.Schulnr schon in der Tabelle Abrechnung vorkommt:

select * from Lehrer L
left join Abrechnung AB on
(AB.Lehrernr=L.Nr and AB.Lizenz like 'Klasse') or
(AB.Schulnr=L.Schulnr and AB.Lizenz like 'Schule')
where L.LMail like 'irgendwer@wo.de'

Das liefert mir immer ein Ergebnis, obwohl weder L.Nr noch L.Schulnr
in Abrechnung vorkommt.

Danke für Hinweise.

--
Stephan

Re: Abfrage mitleft Join

am 09.01.2008 14:22:27 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Abfrage mitleft Join

am 09.01.2008 16:48:37 von Stephan Dreisbach

Andreas Kretschmer schrieb:

>Ich bin mir nicht wirklich sicher, dich korrekt zu verstehen,
>möglicherweise suchst du aber sowas wie:

$frage="select Nr, Schulnr, LMail from Lehrer where
LMail like '$Eingabe'";
$result = @mysql_query($frage,$db) or die(mysql_error());
$num = mysql_numrows($result);
# wenn es eine Person gibt mit der Mail $Eingabe,
# siehe nach, ob deren Nr oder Schulnr in Abrechnung
# vorkommt:
if ($num>0) {
$row = mysql_fetch_array($result);
$frage="select * from Abrechnung where
(Schulnr like '$row[Schulnr]' and Lizenz like 'Schule') or
(Lehrernr like '$row[Nr]' and Lizenz like 'Klasse')";
$result = @mysql_query($frage,$db) or die(mysql_error());
$num = mysql_numrows($result);
if ($num>0) { echo "erlaubt"; }
else { echo "nicht erlaubt"; }
}

Das funktioniert auch, aber ich denke, da gibt es eleganteres...

--
Stephan