Subconsultas de varias columnas
Hasta ahora solo hemos visto subconsultas que devuelven una columna. Pero también podemos trabajar con subconsultas que devuelven varias columnas y varias filas (tablas derivadas).
Comparación por varias columnas
SQL no solo permite comparar por una columna: también permite comparar por parejas los valores de la consulta principal con los valores de la subconsulta.
Por ejemplo, si queremos obtener la información de todas las reservas en las que el precio del alojamiento en el momento de la reserva (Reservations.price) coincide con el precio actual del alojamiento (Rooms.price), podemos hacerlo así:
MySQL 8.4SELECT * FROM Reservations WHERE (room_id, price) IN (SELECT id, price FROM Rooms);
En este ejemplo, la subconsulta devuelve una tabla con los identificadores de los alojamientos y su precio actual:
MySQL 8.4SELECT id, price FROM Rooms
Y después, con esta tabla, limitamos todas las reservas a aquellas en las que la pareja de valores room_id y price aparece en la tabla de la subconsulta.
Esta misma solución se podría hacer sin comparar por varias columnas, pero sería más larga:
MySQL 8.4SELECT Reservations.* FROM Reservations INNER JOIN Rooms ON Reservations.room_id = Rooms.id WHERE Reservations.price = Rooms.price;