我有两张桌子;room
和reservation
。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
为空(如上表)时显示所有可用房间,但是,如果表格上有数据,则网站将根据预订日期和已预订日期(reservation
和room.available_room
)显示剩余房间数量(由于reservation.reserved_qty
room.available_room
(reservation.reserved_qty
-checkin_date
)之间的减少所致)。 最佳答案
我不明白为什么在reservation
表中id_room
列是NULL
的地方会有“缺陷”行。但这并没有改变建议的解决方案,因为这些有缺陷的行将被忽略,因为NULL
的id_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/