PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tipp für SQL Statement gesucht. MySQL


JasonX
2013-11-08, 20:45:42
Hallo,

ich habe ein kleines Problem dabei auf ein SQL Statement zu kommen, das folgendes machen soll.

Ich habe mehrere Tabellen mit identischen Spaltennamen.

Schema:

Name | Spalte 1 | Spalte 2 |Spalte N |

Jetzt soll er mir aus allen Tabellen alle Werte mit SELECT Ausgeben, und hier kommt die krux.

Name soll er mir nur EINMAL ausgeben. Dann immer Spalte 1,Spalte 2, Spalte N, Spalte 1, Spalte 2, Spalte N, usw. für jede meiner Tabellen.

Das Ergebnis sollte dann so aussehen:

Name | Spalte 1 | Spalte 2 |Spalte N |Spalte 1 | Spalte 2 |Spalte N |

Mein Statement sieht derzeit so aus.
SELECT * FROM Tabelle1,Tabelle2
WHERE Tabelle1.Name = 'Benutzername'

Derzeit sieht das Ergebnis so aus:
Name | Spalte 1 | Spalte 2 |Spalte N | Name | Spalte 1 | Spalte 2 |Spalte N |

Und ich steck hier grad fest und weiß nicht weiter.

Danke im voraus
Jason

Gohan
2013-11-08, 20:49:03
Mehrere selects schreiben, die alle die selben Spalten enthalten und diese mit einem UNION ALL verbinden.

JasonX
2013-11-08, 20:50:04
Für jede Tabelle extra ?
Da werde ich ja alt.
Genau das wollte ich ja eigentlich nicht X-D

Gohan
2013-11-08, 20:50:33
Und wie viele Tabellen geht es denn?

JasonX
2013-11-08, 20:55:24
45 Sind`s am Ende ^^
Das is ganz schön viel ;(

Marscel
2013-11-08, 20:58:30
Für jede Tabelle extra ?
Da werde ich ja alt.
Genau das wollte ich ja eigentlich nicht X-D

Dann schreib dir ein Skript, das dir das Statement generiert.

JasonX
2013-11-08, 21:02:12
Kann ich dann das irgendwie per SELECT lösen, der mir dann zumindest aus der ersten erstmal nur den Namen ließt und dann die restlichen Spalten aus der ersten bis x-ten ?

Also in 2 SELECT abragen, ohne das Datensätze durcheinander kommen ?

Marscel
2013-11-08, 21:09:19
Kann ich dann das irgendwie per SELECT lösen, der mir dann zumindest aus der ersten erstmal nur den Namen ließt und dann die restlichen Spalten aus der ersten bis x-ten ?

Also in 2 SELECT abragen, ohne das Datensätze durcheinander kommen ?

Dein Statement hat einen Fehler:

SELECT * FROM Tabelle1,Tabelle2 WHERE Tabelle1.Name = 'Benutzername'

Du sagst hier: such mal alle Einträge aus Tabelle1, wo Name der Benutzername ist und mache einen INNER-JOIN dazu aus Tabelle2. Aber ohne Kriterium. Da wird in der linken Hälfte immer der Benutzer stehen und in der rechten Hälfte einmal jeder Eintrag aus Tabelle2.

Wenn du das verketten willst, dann brauchst du mindestens sowas:

SELECT * FROM Tabelle1,Tabelle2 WHERE Tabelle1.Name = 'Benutzername' AND Tabelle1.Name = Tabelle2.Name

littlejam
2013-11-08, 21:13:46
SELECT * FROM Tabelle1,Tabelle2
WHERE Tabelle1.Name = 'Benutzername'
Warum geht das nicht?

SELECT
T1.Name,
T1.Spalte1, T1.Spalte2, T1.SpalteN,
T2.Spalte1, T2.Spalte2, T2.SpalteN
FROM
Tabelle1 as T1,
Tabelle2 as T2
WHERE
T1.Name = 'Benutzername';

Wobei da irgendwie noch 'n JOIN fehlt würd ich sagen.

Gruß

JasonX
2013-11-08, 21:16:01
@ marscel

Ja, die Idee hatte ich auch zuerst. Jedoch müsste ich das mit dem Gleich setzen auch für jede Tabelle machen.
Ja, wird mir aber wohl nichts übrig bleiben, als das über so eine Verkettung zu machen.
@ all
Aber trozdem danke für die hilfe :)