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
実際には、WHERE句のために行が削除されることはありません。これは、T_Roomsテーブルのすべての行に対して、T_Hostelerテーブルに行が存在しない(または必要でない)ためです。 – gvm123
問題を理解していないので、いくつかのサンプルデータと期待される結果を提供できますか? – xQbert
私はあなたのコメントに同意しなければなりません:私はT_HostelerにNOレコードでT_ROOM 1を持っているとします。これを結合したままにすると、結果セットに1が残ります。しかし、DBEngineがwhere句を適用すると、T_Hostler.H_statusがNULLでないため、t_Hostler内のレコードのない部屋は(where句によって)除外されるため、レコード1は削除されます。これにより、左結合の利点が無効になります。 – xQbert