joins fragen
-
hallo
kann ich bei einem join auch eine abrage machen zuvor?
statt
SELECT s.persnr
FROM
student s LEFT OUTER JOIN prufung p ON s.persnr = p.persnr;geht da nicht z.b.
SELECT s.persnr
FROM student s, prufung p
WHERE s.PLZ = '12345'
AND s.name = 'maier'
LEFT OUTER JOIN prufung p ON s.persnr = p,persnrgeht da auch z.b. den FROM und dem LEFT auch eine where clausel?
wie mache ich das eigentlich wenn ich einen NEGATIVEN LEFT OUTER JOIN brauche?
also alle sätze aus 1.er tabelle mit denen joinen aus der 2ten wo die datensätze nicht übereinstimmen?
mein problem ist auch das ich aus der ersten eine nr habe und dann schauen muss das diese nicht in der 2ten tabelle enthalten ist ( die 2te liefert eine ergebnis menge zurück, ist also nicht eindeutig wie persnr. )
als bsp
...
where ..
....
AND
s.lieblingsnr NOT IN ( select .... FROM tab_lieblings_nummern where primerykey = "123456" )Als Fallbsp könne sein, das Tabelle 1 die Zahl 8 zurückliefert und der typ hat als ergebnis
{ 4,5,7}
dann wäre das ergebnis war, oder der typ hat keine lieblingsnummern ( besser wäre autokennzeichen zu nehmen, da ist es logisch wenn man mehrere hat )
und als ergebnis würde FALSE kommen wenn das ergebnis es 2ten select z.b.
{ 4,8} wäre.
ist da nur NOT IN gut? oder gehts besser mit joins?
-
Welches RDBMS?
Schreibe am Anfang keine JOIN sondern übersetze es.
z.B.
SELECT s.persnr
FROM student s, prufung p
WHERE s.PLZ = '12345'
AND s.name = 'maier'
AND s.persnr = p.persnrDa kann man sich dann nicht irren.
Mit JOIN ist sicher viel möglich aber ohne sich auszukennen kann es schnell zu einem Blockieren eines Tables kommen wenn die Abfrage sehr lange dauert.MySQL < 4.1 kennt keine SUBSELECTS.
-
Es ist eine SAP DB
danke für deine antwort so in der frühe
-
Unix-Tom schrieb:
Welches RDBMS?
Schreibe am Anfang keine JOIN sondern übersetze es.
z.B.
SELECT s.persnr
FROM student s, prufung p
WHERE s.PLZ = '12345'
AND s.name = 'maier'
AND s.persnr = p.persnrDa kann man sich dann nicht irren.
Mit JOIN ist sicher viel möglich aber ohne sich auszukennen kann es schnell zu einem Blockieren eines Tables kommen wenn die Abfrage sehr lange dauert.MySQL < 4.1 kennt keine SUBSELECTS.
Dein Beispiel stellt übrigens auch einen JOIN dar. Es ist eine verkürzte Schreibweise eines INNER-JOINs und lockt selbverständlich ebenso.
-
wie mache ich das eigentlich wenn ich einen NEGATIVEN LEFT OUTER JOIN brauche?
also alle sätze aus 1.er tabelle mit denen joinen aus der 2ten wo die datensätze nicht übereinstimmen?
Z.B. so:
SELECT * FROM taba a LEFT OUTER JOIN tabb b ON a.id = b.id WHERE b.id IS NULL
Liefert alle Zeilen von taba die keine Entsprechung in tabb haben