• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

select über mehrere Tabellen

Status
Für weitere Antworten geschlossen.
E

Efchen

Guest
Hallo,

ich habe Euch mal ein kleines Beispiel konstruiert.
Code:
STRUKTUR:
table1 a
  id    integer
  name  varchar(16)
  dat   date
  num   float

table2 b
  pid   integer
  bdat  date
  tnum  float

INHALT:
a.id    1
a.name  Eins
a.dat   2008-01-01
a.num   100.0

a.id    2
a.name  Zwei
a.dat   2008-01-15
a.num   200.0

b.pid   2
b.bdat  2008-01-16
b.tnum  199.99

AUSGABE:
+------------+------------+-------+--------+--------+
| a.dat      | b.bdat     | a.num | b.tnum | a.name |
+------------+------------+-------+--------+--------+
| 2008-01-01 |            | 100.0 |        | Eins   |
| 2008-01-15 | 2008-01-16 | 200.0 | 199.99 | Zwei   |
+------------+------------+-------+--------+--------+

QUERY:
select * from table1 a union select * from table1 a, table2 b where a.id=b.pid order by a.dat
Es gibt also diese zwei Tabellen. In table1 a sind etliche Einträge, zu einigen, aber eben nicht allen gibt es in table2 b, verbunden über den selben Wert in a.id und b.pid.
Ausgegeben werden soll eine Liste aller Einträge in table1 a, da wo zusätzlich Daten in table2 b existieren, sollen sie mit ausgegeben werden. Siehe Beispielsausgabe.

Kann man das in einem Query (so wie angegeben kann das natürlich nicht funktionieren, weil die Tables ungleich viele Spalten haben) lösen (mit union?)? Oder muss ich mir ne Schleife über die table1 machen und für jeden Eintrag ein separates select auf table2?

Danke vielmals,
-Efchen
 
Warum machst Du das ganze nicht mit LEFT JOIN? Hab das bis eben zwar auch noch nicht gemacht, aber mal eben was probiert, und es funktioniert.
PHP:
SELECT * FROM a LEFT JOIN b ON id = pid
Gruß thuemmy
 
Wenn Du eine Antwort auf die Frage willst, dann müsste sie lauten: "Weil ich keine Ahnung habe, was 'left join' ist" :-) Aber ich habs vorhin beim Schnüffeln in der Doku gefunden, ich schaus mir mal an.

Besten Dank einstweilen, wenn es nicht klappt, komm ich wieder ;-)

Danke, perfekt! Geht!
 
Zuletzt bearbeitet von einem Moderator:
Also von left join habe ich bis eben auch keine Ahnung gehabt, zumindest nicht davon, wie man das anwendet. Habe mich dann schlau gemacht, 1. um Dir zu helfen und 2. damit ich was dazu lerne (was ja wichtiger ist, als zu helfen :-D )

Ich habe das hier auf meinem xampp getestet und es funktioniert. Wenn in Tabelle b keine Sätze sind, dann bekommst Du in den entsprechenden Feldern NULL zurück.

Gruß thuemmy
 
Ja, klappt ausgezeichnet. Und ich bin zu Tränen gerührt, dass Du das extra für mich gemacht hast...wahrscheinlich nur deswegen, weil wir alten Säcke zusammenhalten müssen, was? ;-P
 
Du kanst das auch so schreiben wenst damit leichter tust.

Code:
[FONT=Courier New][COLOR=#0000bb]SELECT [/COLOR][COLOR=#007700]* [/COLOR][COLOR=#0000bb]FROM a,b WHERE id [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]pid [/COLOR][/FONT]

Mfg Splasch
 
Nein, kann er nicht. Mit dem was Du schreibst, würde er nur Sätze aus Tabelle a bekommen, wenn auch Sätze in Tabelle b sind. Und dies ist nicht immer gegeben.

Gruß thuemmy
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben