Выведите всю информацию о пользователе из таблицы Users, кто является владельцем самого дорого жилья (таблица Rooms)

Мое решение

Пытаюсь выполнить такую задачу со скалярным подзапросом, тренажер sql-academy ругается, говорит, что неверно


Ответы (4 шт):

Автор решения: Константин Рожков
select * from Users
where Users.id = (select owner_id from Rooms order by price desc limit 1)

справился с задачей таким образом

→ Ссылка
Автор решения: Ilya S.

Вижу, что уже разобрались, но внесу дополнительно еще и понимание. В условиях задачи делается акцент на то, что надо вывести всю информацию именно о пользователе, но когда мы выбираем в 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. По умолчанию, будет являться внутренним. Надеюсь, поможет кому-нибудь :)

→ Ссылка
Автор решения: Bren

Можете еще посмотреть на такой вариант:

select * from users where id = 
  (select owner_id from Rooms where price = (select max(price) from Rooms));
→ Ссылка