2

私は2つのテーブルを持っています。1 つは顧客用、もう 1 つは客室用です。次の要件でmysqlを使用して部屋を取得したい..

  1. 特定の部屋の顧客数が部屋テーブルの人数よりも少ない
  2. 部屋は顧客テーブルにありません

このペーストをチェックしてください http://pastebin.com/WgTtkQvD

ご覧のとおり、ルーム 1 のみが期待される結果に含まれていません。これは、その「ヘッド」とそのルームの総顧客数が等しいためです。

ルーム 2 には、ルーム 2 の「頭」よりも少ない 3 人の顧客がいます。

部屋 3 と 4 は、まだ誰も占有していないため、期待どおりの結果です。

4

4 に答える 4

5
SELECT   Rooms.id AS room_id,
         COUNT(Customer.id) AS occupied,
         Rooms.head AS total_head,
         Rooms.head - COUNT(Customer.id) AS remaining_head
FROM     Rooms LEFT JOIN Customer ON Customer.room_id = Rooms.id
GROUP BY Rooms.id
HAVING   remaining_head > 0

sqlfiddleで参照してください。

于 2012-07-25T08:23:34.580 に答える
0

これを試して

select 
    r.id,coalesce(ct.counting,0) as occupied,r.head as total_head,
    r.head-coalesce(ct.counting,0)  as remaining_head
from
    rooms as r left join
(
    select room_id,count(id) as counting from customer as ct 
    group by room_id
) as ct on r.id=ct.room_id
where r.head-coalesce(ct.counting,0)>0
于 2012-07-25T08:28:30.613 に答える
0

次のようにしてください。

SELECT r.id, COUNT(c.id), r.head, r.head - COUNT(c.id) FROM Rooms AS r LEFT JOIN Customer AS c ON r.id = c.room_id WHERE r.head <= COUNT(c.id) GROUP BY r.id

私はあなたの質問を完全には理解していませんでしたし、実際の DB でこれを実際に試したこともないので、整理すべき問題がいくつかあるかもしれません。これ以上質問があればコメントしてください。

于 2012-07-25T08:22:26.830 に答える
0

これがうまくいくかどうか教えてください

select r.id,c.occ_cnt as occupied,r.head as total_head,r.head - c.occ_cnt as       remaining_head
from room r,
(
select room_id,count(id) as occ_cnt
from customer
group by room_id
) c
where r.id = c.room_id
于 2012-07-25T08:24:54.757 に答える