SELECT
a.uid as a_uid, a.name as a_name, a.eigenschaft1 as a_eigenschaft1 [... es folgen xx Eigenschaften ...],
b.uid as b_uid, b.name as b_name, b.eigenschaft1 as b_eigenschaft1 [... es folgen xy Eigenschaften ...],
c.uid as c_uid, c.name as c_name, c.eigenschaft1 as c_eigenschaft1 [... es folgen xz Eigenschaften ...],Wozu du das machst wäre auch sinnvoll zu Wissen.
Ok, sagen wir "a" sei ein reales Produkt (mit verschiedenen Eigenschaften) aus einem Material "b" (ebenfalls mit x Eigenschaften) einer Firma "c" mit Adresse, Ansprechpartner etc.
Also erstmal vorweg, du hast verschiedene Tabellen in denen immer die gleichen Spalten mit unterschiedlichen werten sind?
Da würde ich von einem schlechtne Datenbankdesign ausgehen.
FROM
TableA a, TableB b, TableC c
WHERE
a.buid = b.uid
AND
a.cuid = c.uid
AND
[... sonstige Bedingungen ...]Das dürfte das langsamste sein was du machen kannst. Du hast hier ganz einfache join Bedingungen erstellst aber erst eine Kreuztabelle.
Ja, aber wenn einzelne Spalten gleiche Namen haben, zerfräst mir das doch wieder das Result oder? Zum Beispiel wird a.name durch b.name in den resultierenden Rows überschrieben, wenn ich diese nicht durch "AS" a_name etc. mit einem alias versehe...
Ok, also gleiche Spaltennamen
Beispiel:
TableA: uid | name | b_uid
TableB: uid | nameSELECT * FROM TableA
INNER JOIN TableB ON TableA.b_uid = TableB.uid;Die Anfrage wird zwar ausgeführt, aber im resultierenden Array ist in der Spalte 'name' eben der Name aus TableB. Der Name aus TableA existiert nicht mehr. Ich will beide.
Ist hier ein LEFT JOIN nicht sinnvoller?
Willst du alle Einträge in TableA und die dazu gehörigen Daten in TableB oder willst du auch die einträge aus TableB die keine entsprechung in TableA haben?
Ich vermute du willst:
SELECT *, a.name AS a_name, b.name AS b_name FROM TableA AS a LEFT JOIN TableB AS b ON a.b_uid = b.uid;
Wobei ich versuchen würde name genauer zu definieren, z.b. Produktname, Lieferantename
und die id's versuchen gleich zu bennen, also uid für z.b. eine userid und b_id für .... (Produkt ID?)
Dann kannst du die Abfrage noch mehr vereinfachen:
SELECT *, a.name AS a_name, b.name AS b_name FROM TableA AS a LEFT JOIN TableB AS b USING(uid);
Du brauchst hier nicht mehr als ein einfaches Beispiel, warum hast du es nicht umgesetzt?
Wenn mein Problem so einfach zu lösen ist, dann schubs mich bitte in die richtige Richtung... :) Ich sehs nich.
Es kommt halt immer darauf an, was du willst.
Struppi.