MySQL Join schnall ich nicht :(

Okay dann versuch ich es noch einmal.

Tabelle1 hat eine Spalte id und inhalt
Datensätze von Tabelle 1
id | inhalt
1001 | inhalt 1
1002 | inhalt 2
1003 | inhalt 3

Tabelle2 hat eine Spalte id1 und id2
id1 | id2
1001 | 123
1001 | 321

Nun möchte ich Tabelle1 abfragen und gleichzeitig mit Tabelle2 vergleichen.
Die Abfrage bezieht sich auf eine Übergebene ID: für Tabelle1 z.B.:

index.php?id=1001&id2=123
Soll nicht wiedergeben weil in Tebelle2 es ein Datensatz dieser Kombination gibt

index.php?id=1001&id2=321
Soll nicht wiedergeben weil in Tebelle2 es ein Datensatz dieser Kombination gibt

index.php?id=1001&id2=999
Soll den Datensatz von Tabelle1 mit der id1001 wiedergeben weil es in Tebelle2 kein Datensatz dieser Kombination gibt.
 
Hi,

dann interpretiere ich das mal so, dass id1 der Fremdschlüssel zu Tabelle 1 ist.

kuddeldaddeldu hat gesagt.:
Ein LEFT JOIN liefert Dir erstmal alle gewählten Datensätze aus Tabelle 1, auch wenn es keinen dazugehörigen Datensatz in Tabelle 2 gibt. Die Felder aus Tabelle 2 sind in diesem Fall dann NULL.

Code:
SELECT t1.* FROM t1 
   LEFT JOIN t2
   ON(t2.id1 = t1.id AND t2.id2 = 123)

liefert Dir den Datensatz aus Tabelle 1, ob ein "Match" in Tabelle2 gefunden wurde oder nicht. Wenn nicht, wären alle Felder aus Tabelle 2 im Ergebnis NULL.

kuddeldaddeldu hat gesagt.:
Diesen Umstand kannst Du Dir zunutze machen, wenn Du nur die Datensätze aus Tabelle 1 haben willst, die keine Entsprechung in Tabelle 2 haben, indem Du den JOIN darauf einschränkst

Also ergänzt Du, dass t2.id1 NULL sein muss:

Code:
SELECT t1.* FROM t1 
   LEFT JOIN t2
   ON(t2.id1 = t1.id AND t2.id2 = 123 AND t2.id1 IS NULL)

LG
 
Datensatz 1001 aus Tabelle1 wird dennoch ausgegeben :confused:
index.php?id=1001&id2=123
Code:
SELECT t1.* FROM t1 
   LEFT JOIN t2
   ON(t2.id1 = t1.id AND t2.id2 = 123 AND t2.id1 IS NULL)
 
Zieh mal die Einschränkung aus der JOIN-Bedingung raus und mach daraus eine WHERE-Klausel oder mach besser einen INNER JOIN draus.
Seltsame Abfrage übrigens, wofür braucht man sowas?

LG
 
Code:
SELECT t1.* FROM t1 
   INNER JOIN t2
   ON(t2.id1 = t1.id AND t2.id2 = 55 AND t2.id1 IS NULL)
Gibt kein Datensatz aus

Code:
SELECT t1.* FROM t1 
   INNER JOIN t2
   ON(t2.id1 = t1.id AND t2.id2 = 123 AND t2.id1 IS NULL)
Gibt ein Datensatz aus

Wozu brauch man sowas:
Also ein User will aus Tabelle1 ein Datensatz sehen, was aber aus Tabelle2 geprüft wird ob es diesen sehen darf.
Ist dieser User id2 aus Tabelle2 für Datensatz 1001 aus Tabelle1 eingetragen, soll der Datensatz nicht ausgegebn werde und ein Hinweis kommen.
Das ist der Hintergrund :)
 
Hi,

dann halt

kuddeldaddeldu hat gesagt.:
Zieh mal die Einschränkung aus der JOIN-Bedingung raus und mach daraus eine WHERE-Klausel


Wozu brauch man sowas:
Also ein User will aus Tabelle1 ein Datensatz sehen, was aber aus Tabelle2 geprüft wird ob es diesen sehen darf.
Ist dieser User id2 aus Tabelle2 für Datensatz 1001 aus Tabelle1 eingetragen, soll der Datensatz nicht ausgegebn werde und ein Hinweis kommen.
Das ist der Hintergrund :)

Lieber solltest Du Dir ein vernünftiges Berechtigungsschema ausdenken.

LG
 

Neue Beiträge

Zurück