加入两个表与组

时间:2011-12-19 17:34:09

标签: mysql join group-by

我需要帮助查询连接宿舍(宿舍)数据库的两个表:

房间 - 房间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表中有值的行。我需要展示其他没有入住的房间。

请帮我查明我的疏忽或错误。

1 个答案:

答案 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结果。