мне нужна помощь с запросом не объединения двух таблиц для общежития (общежитие) базы данных:Объединить две таблицы с группой
номера - номер ID, категория, аренда, нет мест, и т.д.
студент, живущий в общежитии - студент, живущий в общежитии id, имя, номер комнаты и т. д.
Мне нужно создать результирующий набор, дающий все комнаты, общее количество мест и занятых нет. мест и бесплатно без кроватей и т.д.
Вот запрос я использую:
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
Но я получаю только те строки из таблицы номеров, которые имеют значение в таблице Hostelers. Мне нужно показать другие комнаты, в которых нет места.
Пожалуйста, помогите мне узнать мой недосмотр или ошибку.
На самом деле строки не устраняются из-за предложения WHERE. Это связано с тем, что в таблице T_Hosteler для всех строк таблицы T_Rooms не будут (или не нужны) строки. – gvm123
Тогда вы можете предоставить некоторые примеры данных и ожидаемые результаты, поскольку я не понимаю проблему. – xQbert
Я должен не согласиться с вашим комментарием: Скажем, у меня T_ROOM 1 без записи в T_Hosteler. Когда это осталось, 1 будет по-прежнему находиться в результирующем наборе. Однако, когда DBEngine применяет ваше предложение where, запись 1 будет удалена, потому что T_Hostler.H_status равен NULL, но не «активен», в результате любая комната без записи в t_Hostlers будет исключена (по предложению where). Это отрицает преимущество левого соединения. – xQbert