Hauptmenü

Untermenü

Advanced SQL - Einstiegstutorial 3 - Subselect Teil 2

1. Die Abschnitte

2. Und nun eine Alternative

Wie ich im vorherigen Abschnitt schon sagte, wird euch der Sinn zu dieser Vorgehensweise nicht ganz einleuchten. Das kommt aber später in den Praxistutorials. Zunächst wollen wir mal diesen Müll mit den unterschiedlichen Spalten fuer/tausch und fuerid/tid beseitigen. Und dafür bauen wir uns zuerst ein kleines SQL-Statement.


SELECT 
  a.id,
  IF(a.fuer IS NULLt.mitglieda.fuer) AS fuer,
  t.typa.vona.ana.preis
FROM angebot a
LEFT JOIN tausch t ON (t.angebot a.id)

Das Ergebnis sieht dann so aus.

Subselect 2

Erläuterung

Wirklich interessant ist hier nur die Anweisung IF(a.fuer IS NULL, t.mitglied, a.fuer) AS fuer. Denn da arbeiten wir mit einer einfachen Bedingung. Wenn a.fuer den Wert NULL hat, also bei einem Tauschangebot, dann wird die ID von t.mitglied genommen. Ansonsten die von a.fuer. Somit haben wir alle IDs der angebotenen Spieler in einer Spalte. Aber wie hilft uns das weiter?

3. Ganz einfach

Wir nehmen obiges SQL-Statement als Unterabfrage (Subselect) für unsere eigentliche Suchanfrage und können so bei den folgenden Anweisungen sauber mit einem INNER JOIN arbeiten.


SELECT 
  a.id,
  ...
FROM
    (
      SELECT 
        a.id,
        IF(a.fuer IS NULLt.mitglieda.fuer) AS fuer,
        t.typa.vona.ana.preis
      FROM angebot a
      LEFT JOIN tausch t ON (t.angebot a.id)
    )
    AS a
INNER JOIN ...

Erläuterung

Ganz wichtig ist das AS a! Denn damit erzeugt man eine Art von Referenz, die in diesem (extrem verkürzten) Beispiel für den Wert a.id in der SELECT-Anweisung benötigt wird. Das gilt ebenso für AS fuer in unserem Subselect. Denn das steht dann in der Hauptabfrage als a.fuer zur Verfügung. Natürlich gilt das auch für die übrigen Spalten t.typ, a.von, a.an und a.preis.

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