Rouven: Select`s über mehrere Tabellen ???

Beitrag lesen

Hi,

also was du für dein Problem benötigst sind JOINS (zusammenfügen der Daten) und SUBSELECTS (die es in dieser Form bei MySQL noch nicht gibt, so dass du sie wie normale WHERE-Kriterien nach dem JOIN einfügen musst bis version 4.1 erscheint...).

Folgendes zu den JOINS (dann klärt sich so einiges mit dem Filtern schon mal):
INNER JOIN:
Es werden theoretisch alle Paare von Datensätzen aus beiden Tabellen gebildet, für das Ergebnis werden aber nur diejenigen übrig behalten, bei denen die ON-Klausel erfüllt ist (s.u.)

LEFT/RIGHT JOIN:
Es werden theoretisch alle Paare von Datensätzen aus beiden Tabellen gebildet. Im Ergebnis bleiben alle Daten über, in denen die ON-Klausel übereinstimmt, bzw. die Datensätze zu denen in der zweiten Tabelle keine Ergebnisse gefunden wurden (LEFT JOIN) werden mit NULL aufgefüllt (umgekehrt für RIGHT JOIN)

Tabelle 1
-----------
id feld1        feld2
1  Inhalt1_1_1  Inhalt1_1_2
2  Inhalt1_2_1  Inhalt1_2_2
3  Inhalt1_3_1  Inhalt1_3_2
4  Inhalt1_4_1  Inhalt1_4_2

Tabelle 2
-----------
id feld1        feld2
1  Inhalt2_1_1  Inhalt2_1_2
2  Inhalt2_2_1  Inhalt2_2_2
3  Inhalt2_3_1  Inhalt2_3_2

Abfragen:
1)
SELECT tab1.feld1, tab2.feld1 FROM tab1 INNER JOIN tab2 ON tab1.id=tab2.id
ergibt - beachte: Satz 4 fehlt:
Inhalt1_1_1 Inhalt2_1_1
Inhalt1_2_1 Inhalt2_2_1
Inhalt1_3_1 Inhalt2_3_1

SELECT tab.feld1, tab2.feld2 FROM tab1 LEFT JOIN tab2 ON tab1.id = tab2.id
ergibt - ACHTUNG LEFT JOIN:
Inhalt1_1_1 Inhalt2_1_1
Inhalt1_2_1 Inhalt2_2_1
Inhalt1_3_1 Inhalt2_3_1
Inhalt1_4_1 NULL

Um jetzt noch zu filtern:
SELECT tab.feld1, tab2.feld2 FROM tab1 LEFT JOIN tab2 ON tab1.id = tab2.id WHERE tab2.feld2 = Inhalt2_3_2
Inhalt1_3_1 Inhalt2_3_1