MySQL (Erledigt) Doppelter JOIN mit der gleichen Tabelle - Aliase

Seldon

Well-known member
13 August 2008
115
9
Anscheinend suche ich falsch, finde einfach keine Lösung für folgendes Problem:

Nehmen wir an, es gibt eine Tabelle Kombinationen:

kombination_id | variante1 | variante2

Und eine Tabelle Varianten:

variante_id | name | farbe | groeße | preis

das Ganze geht etwa noch 10 Spalten weiter.

Jetzt mache ich folgenden SELECT:

Code:
SELECT       a.*,
                   b.*

FROM          kombinationen
INNER JOIN varianten as a ON (kombinationen.variante1 = a.variante_id)
LEFT JOIN varianten as b ON (kombinationen.variante2 = b.variante_id)

Wie kann ich jetzt unterscheiden, von welcher der beiden Tabellen der jeweilige Spalteninhalt kommt? Was ich mir überlegt habe war

Code:
SELECT       a.*,
                   b.name as 'b_name',
                   b.farbe as 'b_farbe',
                  ...


aber da gibt es doch sicher auch eine einfachere Möglichkeit?

mfg,
Seldon
 
Zuletzt bearbeitet:
Bei mssql wird glaube ich alles für b dann in expr1,expr2... umbenannt, damit keine Spalten den gleichen namen haben.
Am besten ist du definierst es selber.
 
Mir ist nichts dergleichen bekannt, ist auch in keinem SQL-Standard vertreten, also gibt es es nicht für MySQL.
 
SELECT * is böse! - kriegt man immer beigebracht. Jetzt haben wir doch auch mal ein schönes Beispiel, wo man das auch sieht, dass es Probleme geben kann.

Lösung:
Selektiere nur diejenigen Attribute, die du wirklich brauchst. Haben zwei denselben Namen, kommst du nicht ums Umbenennen rum. Ob jetzt mit abc-Präfix, 123-Suffix (mag ich z.B. immer lieber) oder sonstwie, bleibt dir überlassen.

Alternative Lösung: NICHT MACHEN:!:
Wenns es die Sprache, die die MySQL-Daten entgegennimmt, erlaubt, kannst du die einzelnen Attribute numerisch nach der Reihenfolge ansprechen.

z.B. Java:
PHP:
ResultSet res = stmt.executeQuery(
    "SELECT a.farbe, b.farbe FROM a, b;");
while(res.next()) {
  doSomething(res.getString(1), res.getString(2));
}
res.close();
besser:
PHP:
ResultSet res = stmt.executeQuery(
    "SELECT a.farbe AS a_farbe, b.farbe AS b_farbe
     FROM a, b;");
while(res.next()) {
  doSomething(res.getString("a_farbe"), res.getString("b_farbe"));
}
res.close();
 
Vielen Dank für die Antworten!

Da ich leider fast alle Spalten der Tabelle brauche, habe ich mir also eine entsprechende View angelegt, die jede dieser benötigten Spalten wie vorgeschlagen umbenennt. Auf die View hätte ich früher kommen sollen... dachte schon, ich müsste das in jedem Query machen :roll:

mfg,
Seldon