2011-12-19 7 views
0

を持つ2つのテーブルを結合しますID、名前、部屋番号などは、私はホステル(寮)データベースのための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' 
GROUP BY h.h_roomno 

しかし、私はhostelersテーブルの値を持っている部屋のテーブルからの行のみを取得しています。私はまた、占有のない他の部屋を示す必要があります。

私の見落としや間違いを見つける助けてください。 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 

答えて

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 

オプションは、問題はあなたのt_hostelersでレコードがないので、節がt_roomsからレコードを除外されています。これを修正するには、結合にフィルタを適用する必要があります。これは、t_hostelersまたはwhere句にNULLを含める結果にのみ適用されます。

+0

実際には、WHERE句のために行が削除されることはありません。これは、T_Roomsテーブルのすべての行に対して、T_Hostelerテーブルに行が存在しない(または必要でない)ためです。 – gvm123

+0

問題を理解していないので、いくつかのサンプルデータと期待される結果を提供できますか? – xQbert

+0

私はあなたのコメントに同意しなければなりません:私はT_HostelerにNOレコードでT_ROOM 1を持っているとします。これを結合したままにすると、結果セットに1が残ります。しかし、DBEngineがwhere句を適用すると、T_Hostler.H_statusがNULLでないため、t_Hostler内のレコードのない部屋は(where句によって)除外されるため、レコード1は削除されます。これにより、左結合の利点が無効になります。 – xQbert

関連する問題