meisterqui-gonjinn
Goto Top

Abfragen zweier Tabellen (nicht relationel)

Ich habe ein Problem mit einer Abfrage von zwei Tabellen:

1. Tabelle
ID_Auto AutoName
100         Ford
101         VW

2. Tabelle
ID_Auto ID_Feld Feld_Inhalt
100        0           Sommer-Reifen
100        1           Test-Eintrag
101        0           Winter-Reifen

Folgende Ausgabe möchte ich gerne erreichen:
Ford    Sommer-Reifen    Test-Eintrag
VW      Winter-Reifen       

Kann ich sowas irgendwie mit einer SQL-Abfrage realisieren?
Oder weiß jemand, wie ich es automatisiert hinbekomme die zweite Tabelle in die Form:

ID_Auto Feld0                  Feld1
100        Sommer-Reifen   Test-Eintrag
101        Winter-Reifen        

Content-Key: 112143

Url: https://administrator.de/contentid/112143

Printed on: April 25, 2024 at 01:04 o'clock

Member: AndreasHoster
AndreasHoster Mar 23, 2009 at 11:58:58 (UTC)
Goto Top
Ich habe zwar keine Ahnung wie es ohne relationale Verknüpfungen gehen soll, aber mit Hilfe relationaler Verknüpfungen sähe es so aus:
SELECT TA1.AutoName, t2_1.FELD_Inhalt, t2_2.FELD_Inhalt
FROM (TA1 LEFT JOIN [select * from TA2 where ID_FELD='0']. AS t2_1 ON TA1.ID_AUTO = t2_1.ID_AUTO) LEFT JOIN [select * from TA2 where ID_FELD='1']. AS t2_2 ON TA1.ID_AUTO = t2_2.ID_AUTO;  
Mit TA1 als 1. Tabelle und TA2 als 2. Tabelle.
Anmerkung: Bei mir sind die IDs varchar definiert und je nach System muß man eventuell die [ ] durch ( ) ersetzen.
Member: MeisterQui-GonJinn
MeisterQui-GonJinn Mar 23, 2009 at 13:37:50 (UTC)
Goto Top
Vielen Dank.

Jetzt eine weiterführende Frage. Es ist ja nicht so, dass ich nur 2 IDs in Tabelle2 habe sondern gleich 51.... kann ich den LEFT JOIN solange verlängern wie ich möchte und wenn ja wie? Kann man das auch automatisieren?
Member: Logan000
Logan000 Mar 23, 2009 at 14:06:05 (UTC)
Goto Top
Moin Moin

Mein vorschlag sähe so aus: (Wobei ich Tabelle1 "Autos" und Tabelle2 "Reifen" getauft habe.
Select Autoname, Reifen1.Feld_Inhalt, Reifen2.Feld_inhalt 
From Autos 
	LEFT JOIN Reifen As Reifen1 ON Autos.ID_Auto = Reifen1.ID_Auto AND Reifen1.ID_feld = 0
	Left JOIN Reifen As Reifen2 ON Autos.ID_Auto = Reifen2.ID_Auto AND Reifen2.ID_feld = 1
Ist im Grunde das gleiche in grün, nur ohne "Unterabfragen".

Zitat von @MeisterQui-GonJinn:
Jetzt eine weiterführende Frage. Es ist ja nicht so, dass ich
nur 2 IDs in Tabelle2 habe sondern gleich 51.... kann ich den LEFT JOIN solange verlängern wie ich möchte
Ja Theoretisch schon. Alledings haben die meisten Datenbanken eine Max. Länge für Abfragen.
und wenn ja wie?
Für die 2. Tabelle immer einen neuen Alisanamen vergeben, etwa so:
...
Left JOIN Reifen As Reifen2 ON Autos.ID_Auto = Reifen2.ID_Auto AND Reifen2.ID_feld = 1
Left JOIN Reifen As Reifen3 ON Autos.ID_Auto = Reifen2.ID_Auto AND Reifen2.ID_feld = 2
Left JOIN Reifen As Reifen4 ON Autos.ID_Auto = Reifen2.ID_Auto AND Reifen2.ID_feld = 3
....
Und natürlich das Select Entsprechend erweitern:
Select ...... Reifen2.Feld_Inhalt, Reifen3.Feld_Inhalt, Reifen4.Feld_Inhalt
...
Kann man das auch automatisieren?
Ja, aber wozu. Die Abfrage erstellst Du einmal und dann hast Du Sie.

Gruß L.