Многостолбцовые подзапросы
До этого мы рассматривали лишь подзапросы, возвращающие один столбец. Но мы также можем работать с подзапросами, возвращающими несколько столбцов и несколько строк (производные таблицы).
Сравнение по нескольким столбцам
SQL поддерживает сравнение не только по одной колонке, но позволяет попарно сравнивать значения в основном запросе со значениями в подзапросе.
Например, если мы хотим получить информацию о всех бронированиях, в которых цена жилья на момент брони (Reservations.price) соответствует текущей стоимостью жилья (Rooms.price). То мы это можем сделать следующим образом:
SELECT * FROM Reservations WHERE (room_id, price) IN (SELECT id, price FROM Rooms);
В данном примере, подзапрос возвращает таблицу с идентификаторами жилых помещений и их текущей ценой:
SELECT id, price FROM Rooms
И затем, используя эту таблицу, мы ограничиваем все бронирования только теми, в которых пара значений room_id и price найдутся в таблице подзапроса.
Это же решение можно было бы выполнить и без сравнения по нескольким колонкам, но оно было бы более объёмным:
SELECT Reservations.* FROM Reservations INNER JOIN Rooms ON Reservations.room_id = Rooms.id WHERE Reservations.price = Rooms.price;