Выведите всю информацию о пользователе из таблицы Users, кто является владельцем самого дорого жилья (таблица Rooms)
Пытаюсь выполнить такую задачу со скалярным подзапросом, тренажер sql-academy ругается, говорит, что неверно
Пытаюсь выполнить такую задачу со скалярным подзапросом, тренажер sql-academy ругается, говорит, что неверно
select * from Users
where Users.id = (select owner_id from Rooms order by price desc limit 1)
справился с задачей таким образом
Вижу, что уже разобрались, но внесу дополнительно еще и понимание. В условиях задачи делается акцент на то, что надо вывести всю информацию именно о пользователе, но когда мы выбираем в SELECT все столбцы и потом делаем JOIN, в выдачу попадает вся информация и из другой таблицы. Следовательно надо исключить ее из финального результата. Решить можно следующим образом:
SELECT u.*
FROM Users u
JOIN Rooms r ON u.id = r.owner_id
WHERE price = (SELECT MAX(price) FROM Rooms)
Час думал, что я делаю не так. Сэкономлю время трудягам, которые в будущем столкнутся с данным вопросом. Постараюсь подробно ответить. Финальный код:
Select Users.* FROM users JOIN Rooms ON Rooms.owner_id = Users.id WHERE price = (SELECT MAX(price) FROM Rooms)
Пояснения: Во-первых, ставим "звёздочку", тем самым мы хотим получить все записи. Для выбора конкретной таблицы ставим "Users." Точку не забываем) Получается все значения из таблицы Users. Если просто "звёздочку" поставите без указания конкретной таблицы, то он ещё вам выдаст результаты из Rooms, а это по условиям задачи не требуется, поэтому может выдавать сообщение о неверном решении. Во-вторых, делаем подзапрос на ценник для таблицы Rooms. Таким образом получится скалярное значение, удовлетворяющие критерии запроса. В-третьих, связываем обе таблицы через многотабличный запрос JOIN. По умолчанию, будет являться внутренним. Надеюсь, поможет кому-нибудь :)
Можете еще посмотреть на такой вариант:
select * from users where id =
(select owner_id from Rooms where price = (select max(price) from Rooms));