bugfix> sql > 投稿


SQLクエリに関するヘルプが必要です。
ホテルの予約を管理する次のサンプルデータベースがあるとします。

Customer(ID, name, birthDate, city);
Room(number, floor, beds, roomtype, price);
Bookings(Customer, roomNumber, floor, checkInDate, checkOutDate);

どの顧客が予約しただけで、経済的なタイプの部屋のみを知る必要があります。 これは私のクエリです:

select Customer from Bookings
   join Room on(Bookings.num = camera.roomNumber and Bookings.floor= 
   Room.floor)
        where (Bookings.Customer, Bookings.floor) not in (select number, floor from 
        Room where roomType != 'economic')

私の問題は、このクエリは経済的な部屋を予約した顧客を表示するだけでなく、他のタイプの部屋を予約した顧客も表示することです。 経済的な部屋のみを予約した顧客を獲得するために、出力を制限するにはどうすればよいですか? ありがとうございました

回答 2 件
  • not exists を使用する  :

    select c.*
    from Customer c
    where not exists (select 1 
                      from Bookings b
                      inner join Room r on b.num = r.roomNumber and b.floor = r.floor
                      where c.ID = b.Customer and r.roomType <> 'economic'
                      );
    
    

  • 集約を使用できます:

    select b.Customer
    from Bookings b join
         Room r
         on b.num = r.roomNumber and b.floor = r.floor
    group by b.Customer
    having min(roomType) = max(roomType) and min(roomType) = 'economic';
    
    

あなたの答え