Hauptmenü

Untermenü

MySQL - Joins - Alias

1. Gib dem Kind einen Namen

Solange man es nicht Kevin oder Jaqueline nennt. Spaß beiseite, wir wollen ja was lernen. Also! Wenn man mit Abfragen über mehrere Tabellen arbeitet, so muss man sich über ein paar Dinge im Klaren sein. Denn sonst kommt man später in die Bredouille.

2. Das Problem


Tabelle 'bla'   Tabelle 'laber'
+--+------+     +--+-------+
|id|blubb |     |id|blubber|
+--+------+     +--+-------+
| 1|a     |     | 1|x      |
| 2|b     |     | 2|y      |
+--+------+     +--+-------+

Wenn man nun nach den Spalten blubb und blubber sucht, so reicht ein einfaches SELECT blubb, blubber FROM ... völlig aus, da die beiden Spalten unterschiedliche Namen haben. Es gibt nur ein Problem. Wenn man die Datenbankstruktur nicht auswendig im Kopf hat, so weiß man auf Anhieb nicht, welche Spalte sich in welcher Tabelle befindet.

Und was passiert, wenn man die gleichnamigen Spalten id auch noch haben möchte? Dann gibt es unter Umständen später Probleme mit PHP, weil das damit nicht klar kommt. Warum? Ganz einfach. Der Name einer Spalte wird bei einem mysql_fetch_assoc als Wert für das entsprechende assoziative Array benutzt. Und wenn MySQL zwei Spalten gleichen Namens zurückliefert, so kommt nur Letzteres bei PHP an.

3. Lösungen

Möglichkeit 1

Man kombiniert die Spalten- mit den Tabellenamen, also


SELECT
  bla.id, 
  bla.blubb,
  laber.id,
  laber.blubber
FROM
  blalaber

Möglichkeit 2

Man legt für den Tabellennamen einen Alias an. Da Programmierer eigentlich ziemlich tippfaul sind, nimmt man gewöhnlich und so weit wie möglich den Anfangsbuchstaben der Tabelle.


SELECT
  b.id, 
  b.blubb,
  l.id,
  l.blubber
FROM
  bla b, 
  laber l

4. Gleichnamige Spalten

Wie ich schon sagte, gibt es in der Situation Probleme mit PHP. Daher sollte man auch gleichnamigen Spalten einen Alias verpassen. Im Gegensatz zu den Tabellen benötigt man hier ein AS.


SELECT
  b.id AS b_id,
  b.blubb,
  l.id AS l_id,
  l.blubber
FROM
  bla b, 
  laber l

5. Wichtig

Wenn man sowohl den Tabellen als auch den Spalten einen Alias verpasst, so hat das keine Auswirkung auf die tatsächliche Struktur einer Datenbank. Es geht ausschließlich um die Namen der Rückgabewerte, die zum Beispiel von PHP verarbeitet werden müssen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt