Abfrage über 2 Tabellen mit Join der Daten

matzseesi

Erfahrenes Mitglied
Hi Leute!

Ich hänge mal wieder an einem SQL Problem mit dem ich mir viel Arbeit ersparen kann!

und zwar hab ich zwei tabellen
[pages]
pid
mid
name

[modules]
mid
name

ich habe nun eine pid = 2 und möchte mit einer Abfrage quasi beides erschlagen.
Ich bin mir ziemlich sicher dass das geht, nur wie weiß ich nicht!
Sind das hier dann schon die Joins?

Gibt es irgend ein Tool mit dem man sich solche Abfragen zusammenbasteln kann?

Vielen Dank!

Gruß

Matz
 
Und deine Frage war?
Ein wirkliches Tool ist mir nicht bekannt, da die Syntax sehr datenbankspezifisch ist.
Kannst also auch das Access-Geklicke verwenden, kommt ähnlich unnützes dabei raus.

Ansonsten - deine Frage war?

SQL:
select <spalten>
from <tabelle1>, <tabelle2>
where <tabelle1_join_id> = <tabelle2_tabelle1_join_id>

War das die Antwort auf deine Frage?
Wie war die doch gleich nochmal? :)
 
Ich möchte in der Abfrage die Daten aus der modules Tabelle drinnen haben!
Dh.

[pages]
pid
mid
pname

[modules]
mid
mname

ich habe eine pid = 2 und möchte alle Daten aus der pages tabelle mit der pid = 2 + die daten aus der modules mit der mid der pages Tabelle bei pid = 2.

Weißt du was ich meine?
 
Dann brauchst du nur noch den Code oben für deine Tabellen anpassen und anhängen:
SQL:
where pid = '2'

Alternativ

SQL:
where pid = 2

wenn du pid als integer angelegt hast.
 
Hmm?

Und woher weiß SQL automatisch dass er mit der mid aus der pages tabelle die daten mit der entsprechenden mid aus der modules tabelle holen soll?

mid ist der Primary Key der modules Tabelle.
Jede Seite mit ihrer pid ist einem Modul zugeordnet! und ich möchte quasi mit einer Abfrage die Seitendaten + die Daten des zugehörigen Moduls holen!

Weiß du jetzt was ich meine? Das funktioniert mit einer einfachen abfrage glaub ich nicht mehr oder?

Gruß
 
Doch das funktioniert mit einer einfachen Abfrage.
Und zwar genau mit der, die ich oben schon geschrieben habe.
Du musst nur noch deine Felder und Tabellennamen einsetzen.

Unter join-id verstehe ich den Primär/Fremdschlüssel.

Sorry, bin grade in Eile, sonst würd ich's dir noch posten, muss jetzt aber weg.
 
moin moin

Dein Select sollte glaub ich mal so aussehen :

SQL:
SELECT pages.pid, pages.mid, pages.pname, modules.mname 
FROM modules, pages 
WHERE pages.pid = '2' AND modules.pid='2';

mir sind auch keine Tools bekannt die sowas können ;)
 
Zuletzt bearbeitet von einem Moderator:
Servus!

Nope!

SQL:
SELECT pages.pid, pages.mid, pages.pname, modules.mname
FROM modules, pages
WHERE pages.pid = 2 AND pages.mid=modules.mid;

Was ich nur noch nicht ganz verstehe ist für was brauche ich dann joins?
Es sieht hier so aus als würde er die Bedingungen hinter dem Where einfach von links nach rechts abarbeiten => dh. zuerst holt er sich alle datensätze mit pages.pid=2 und anschließend dann von diesen Datensätzen noch die Daten der modules tabelle mit der jeweiligen pages.mid.

Stimmt das ?

Gruß und Danke!
 
Zuletzt bearbeitet von einem Moderator:
Du joinst - du merkst es nur nicht :)

SQL:
FROM modules, pages

Das erzeugt ein kartesisches Produkt, d. h. jeder Datensatz der einen Tabelle wird mit jedem Datensatz der anderen Tabelle verknüpft (gejoined). Das ist natürlich völliger Dummfug. Darum musst du ihm mit

SQL:
AND pages.mid=modules.mid

eine Vorschrift geben, auf Basis derer er dann den ganzen unnötigen Kram wieder wegwerfen kann. Du gibst ihm also eine Regel für ein richtiges Joinen.

Je nach Datenbank gibt es unterschiedliche Syntax für Joins. Obiges Beispiel wäre z.B. die Informix-Syntax, die aber von vielen anderen DBMS auch verstanden wird.
 

Neue Beiträge

Zurück