Соединить две таблицы с группой - PullRequest
0 голосов
/ 19 декабря 2011

Мне нужна помощь с запросом, объединяющим две таблицы для базы данных хостела (общежития):

Номера - номер комнаты, категория, аренда, количество спальных мест и т. Д.

Хостелер - идентификатор хоста, имя, номер комнаты и т. Д.

Мне нужно сгенерировать набор результатов с указанием всех комнат, общего количества спальных мест и занятых номеров кроватей и бесплатно без кроватей и т. д.

Вот запрос, который я использую:

SELECT r.R_ID , r.R_Beds, count(h.h_id), (r.r_beds-count(h.h_id)) ,
if((r.r_beds-count(h.h_id))>0, 'Available', 'Full' ) , r.r_rent
FROM T_Rooms r LEFT OUTER JOIN t_hostelers h
ON r.r_id = h.h_roomno
WHERE h.h_status= 'active'
GROUP BY h.h_roomno

Но я получаю только строки из таблицы комнат, которые имеют значение в таблице хостелов. Мне нужно показать и другие комнаты без проживания.

Пожалуйста, помогите мне выяснить мою оплошность или ошибку.

1 Ответ

0 голосов
/ 19 декабря 2011

Вариант 1

SELECT r.R_ID , r.R_Beds, count(h.h_id), (r.r_beds-count(h.h_id)) ,
if((r.r_beds-count(h.h_id))>0, 'Available', 'Full' ) , r.r_rent
FROM T_Rooms r 
LEFT OUTER JOIN t_hostelers h
  ON r.r_id = h.h_roomno
     AND h.h_status= 'active'
GROUP BY h.h_roomno

Вариант 2

SELECT r.R_ID , r.R_Beds, count(h.h_id), (r.r_beds-count(h.h_id)) ,
if((r.r_beds-count(h.h_id))>0, 'Available', 'Full' ) , r.r_rent
FROM T_Rooms r 
LEFT OUTER JOIN t_hostelers h
  ON r.r_id = h.h_roomno
WHERE
     (h.h_status= 'active' or H.H_Status is null)
GROUP BY h.h_roomno

Проблема в том, что ваше предложение where исключает записи из t_rooms, потому что в t_hostelers нет записи. Для исправления необходимо применить фильтр к объединению, чтобы он применялся только к t_hostelers, ИЛИ включать NULL приводит к предложению where.

...