Select`s über mehrere Tabellen ???
woormsen
- datenbank
0 Rouven0 Frank aus Ulm
Schönen Abend,
ich mache gerade zum ersten Mal Select`s über mehrere Tabellen
und wollte zuerst hier fragen, bevor ich loslegen muss....
also ..
1.)
wer kann mir sagen ,wie der Befehl aussieht mit dem ich nur die
Werte aus Tabelle 1 auslese bei denen die Field-Werte in CustomerID
mit den CustomerID`s aus Tabelle 2 übereinstimmen und zusätzlich eben auch nur die Daten ausgelesen werden,bei denen schon in in Tabelle 2 die Einschränkung gemacht worden ist ,das die Field-Werte von
ShopperID in Tabelle 2 einer bestimmten Variablen (strtext = 1 z.B.) entspechen müssen...
2.) weiss jemand wie ich die Daten filtern kann , deren Field-Werte in
AdressID aus Tabelle 1 mit den Field-Werten in DeliveryAdressID aus
Tabelle 2 übereinstimmen und dies zusätzlich wieder nur für die Daten,
bei denen die Field-Werte in CustomerID aus Tabelle 2 mit den
CustomerID`s in Tabelle 3 übereinstimmen
3.) ... und wie kann ich die Daten auslesen ,die im Field lastchange
heute oder heute und in den letzten 4 Tagen eingetragen worden
sind
hoffe das war verbal ok & verständlich...
gruss thomas
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
ok ,habs durchgelesen und bin am werkeln ..
Gruss Thomas
und hab das fast vergessen als Frage ; geht es auch über 3
Tabellen ?? .. Gruss Thomas
Hi woormsen
und hab das fast vergessen als Frage ; geht es auch über 3
Tabellen ?? .. Gruss Thomas
Und jetzt schreiben wir das Posting noch vernünftig: Du zitierst neu von dir geschriebenen Text, das macht keinerlei Sinn. Ehrlich gesagt finde ich deine Frage auch ausserordentlich faul, lies doch einfach die Doku.
Und ja, natürlich geht es über 3 Tabellen, das wüsstest du auch wenn du gelesen hättest.
Gruss Daniela
Schönen Abend,
hab es jetzt auch noch mit 3 Tabellen hingekriegt ..
»»..also Thanx für eure Beiträge ..Gruss Thomas
Hi, hallo
jedes "vernünftige" Datenbanksystem hat doch einen QueryDesigner mit dem du visuell deine Abfragen zusammenbauen kannst. Und noch vernünftigere erlauben dir dann auch den SQL-Quelltext dazu zu sehen.
Ich weiß nicht genau, was du für DBs im Einsatz hast ... mit MS Access geht das aber sehr DAU-freundlich ... klick, drag'n'drop und so weiter. Meist werden da durch korrekte Beziehungen zwischen den Quelltabellen schon automatisch die richtigen Joins gebaut. wenn nicht, kannst du da im Abfragedesigner noch zusätzlich per Drag'n'Drop Felder zwischen Tabellen in Beziehung setzen.
Manchmal empfehlen sich Subselects (Unterabfragen) mehr als Joins. :-)
Gruß, Frank
Tschau, tschüß,
Frank