我需要帮助查询连接宿舍(宿舍)数据库的两个表:
房间 - 房间ID,类别,租金,床位等
Hosteler - 旅馆老板号,姓名,房间号等
我需要生成一个结果集,给出所有房间,总共没有床和占用没有。床和免费床等等
以下是我正在使用的查询:
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
但我只从room表中获取了在hostelers表中有值的行。我需要展示其他没有入住的房间。
请帮我查明我的疏忽或错误。
答案 0 :(得分:0)
选项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,或者在where子句中包含NULL结果。