Mehrspaltige Subqueries
Bisher haben wir nur Subqueries betrachtet, die eine Spalte zurückgeben. Wir können aber auch mit Subqueries arbeiten, die mehrere Spalten und mehrere Zeilen liefern (abgeleitete Tabellen).
Vergleich über mehrere Spalten
SQL unterstützt nicht nur den Vergleich über eine einzelne Spalte, sondern erlaubt es auch, Werte aus der Hauptabfrage paarweise mit Werten aus der Subquery zu vergleichen.
Wenn wir zum Beispiel Informationen zu allen Buchungen erhalten möchten, bei denen der Preis der Unterkunft zum Zeitpunkt der Buchung (Reservations.price) dem aktuellen Preis der Unterkunft (Rooms.price) entspricht, geht das folgendermaßen:
MySQL 8.1SELECT * FROM Reservations WHERE (room_id, price) IN (SELECT id, price FROM Rooms);
In diesem Beispiel liefert die Subquery eine Tabelle mit den IDs der Unterkünfte und ihrem aktuellen Preis:
MySQL 8.1SELECT id, price FROM Rooms
Und dann beschränken wir mit Hilfe dieser Tabelle alle Buchungen auf die, bei denen sich das Wertepaar room_id und price in der Tabelle der Subquery wiederfindet.
Diese Lösung ließe sich auch ohne Vergleich über mehrere Spalten umsetzen, allerdings wäre sie umfangreicher:
MySQL 8.1SELECT Reservations.* FROM Reservations INNER JOIN Rooms ON Reservations.room_id = Rooms.id WHERE Reservations.price = Rooms.price;