select über mehrere Tabellen

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
[/code]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
[/php]Gruß thuemmy

Wenn Du eine Antwort auf die Frage willst, dann müsste sie lauten: „Weil ich keine Ahnung habe, was ‚left join‘ ist“ :slight_smile: 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 :wink:

Danke, perfekt! Geht!

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 :smiley: )

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? :stuck_out_tongue_winking_eye:

Alter ist doch eine Sache, die in der Birne stattfindet… Aber wenn Du Dich alt fühlst :stuck_out_tongue_winking_eye:

Du kanst das auch so schreiben wenst damit leichter tust.

 
[FONT=Courier New]SELECT * FROM a,b WHERE id = pid [/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