@AlpineMilk

Как правильно составить запрос?

Нужно достать только те апартаменты в которых количество зарезервированных меньше чем установлено для каждого апартамента, здесь должны быть выведены строки с id 2 и 3, так как в редисон уже все слоты заняты Мой запрос выглядит вот так
select * from apartment as a
LEFT JOIN (SELECT r.id, sum(r.guests) as guests FROM reservation AS r 
GROUP BY r.apartment_id ) as r ON a.id = r.id
WHERE a.slots > r.guests
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
SQL JOIN

VQ5XP.png


CREATE TABLE appartament ( id int, name varchar(20), slots int );
INSERT appartament VALUES ( 1, 'Redison', 3 ), ( 2, 'Qubus Hotel', 2 ), ( 3, 'Hotel Nuber One', 4 );
CREATE TABLE reservation ( appartament_id int, guests int );
INSERT reservation VALUES ( 1, 2 ), ( 1, 1 ), ( 3, 1 );


SELECT name, slots, IFNULL( SUM( guests ), 0 ) AS CountGuest  
  FROM reservation
    RIGHT JOIN appartament ON id = appartament_id
  GROUP BY name
  HAVING CountGuest < slots


Проверка.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы