Rolf b: Datenbankabfrage

Beitrag lesen

Wir schweifen für den OP zwar jetzt etwas ab, aber das Thema ist interessant :)

Was ist eine Subquery? Entweder setze ich sie in der SELECT Klausel ein, um den Wert für eine bestimmte Spalte zu bestimmen. Dann bekomme ich im folgenden Beispiel entweder einen Namen oder NULL.

SELECT mailadresse, SELECT name FROM personen WHERE personen.id = adressen.pers_id) as Name
FROM adressen

Kann man machen und wenn man nur eine Spalte hinzu holen will, würde ich diese Lösung auch empfehlen. Ich habe schon selbst Monster-Queries gebaut (auf eine Datawarehouse-Sterntabelle), wo ich 20 solcher Subselects drin hatte.

Aber was ist, wenn ich zwei Felder aus der Personen Tabelle brauche. Zwei Subqueries? Würde ich ineffizient nennen. Und was ist, wenn ich die Sätze gar nicht will, wo es die pers_id der Adressen nicht in der Personentabelle nicht gibt? (Ja ich weiß, ist im Beispiel sehr unwahrscheinlich.) Einen nachgelagerten IS NULL Test einbauen? Joins sind ein Feature von SQL, auf das die Server optimiert sind, und das sollte man dann auch nutzen. Und ich kann durch INNER JOIN oder RIGHT JOIN entscheiden, ob ich Zeilen ohne Match sehen will oder nicht.

SELECT adressen.mailadresse, personen.name, personen.gebDat, personen.gender
FROM adressen RIGHT JOIN personen ON adressen.pers_id = personen.id

Der andere Einsatz von Subqueries ist die Exists-Klausel, ABER da kann ich keine Daten herausholen. Nur auf Existenz prüfen. Für den OP glaube ich daher, dass das nichts hilft (es sei denn, du nutzt EXISTS um die Zeilen auszufiltern, wo die Subquery in der SELECT Zeile keine Daten liefert. Aber DAS wäre nun sehr mühsam und vor allem schreibst Du die Subquery dann zweimal).

Rolf