我有两张桌子;roomreservation
room上的数据

id_room | name_room | available_room
1         Class3      6
2         Class2      8
3         Class1      6

reservation上的数据为空
id_reservation | id_room | reserved_qty | checkin_date | checkout_date
1
2
3

如果客人想要预订房间,网站将在表格reservation为空(如上表)时显示所有可用房间,但是,如果表格上有数据,则网站将根据预订日期和已预订日期(reservationroom.available_room)显示剩余房间数量(由于reservation.reserved_qtyroom.available_roomreservation.reserved_qty-checkin_date)之间的减少所致)。

最佳答案

我不明白为什么在reservation表中id_room列是NULL的地方会有“缺陷”行。但这并没有改变建议的解决方案,因为这些有缺陷的行将被忽略,因为NULLid_room值永远不会成功地连接任何内容。
你想要的是一个OUTER JOIN而不是一个INNER JOIN,这样没有预订就不会阻止结果中出现一个房间。

SELECT room.id_room
     , room.name_room
     , room.available_room - SUM(COALESCE(reservation.reserved_qty, 0)) AS remaining_rooms
    FROM room
        LEFT OUTER JOIN reservation
            ON room.id_room = reservation.id_room
    WHERE
        checkin_date IS NULL OR
        @day BETWEEN checkin_date AND checkout_date
    GROUP BY room.id_room, room.name_room;

关于mysql - 如果一个表为空或无数据,如何使用INNER JOIN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34806259/

10-09 19:51