【发布时间】:2020-02-21 10:23:17
【问题描述】:
我正在用 C# 构建一个酒店预订系统,作为我大学毕业后向雇主展示的投资组合项目。
我的主窗体有一个月历对象,一旦单击日期,它将更新包含所有房间的 DataGridView;如果该房间在该日期有预订,则会显示出来。
在 MySQL 数据库中,我使用的 2 个表是“Rooms”和“Reservations”
我将包含带有示例数据的图像,这些图像还显示列标题。
自从我使用 MSSQL 学习 SQL,MySQL 给我带来了一些麻烦。
为了使主窗体正确显示数据,我需要查询返回所有房间,以及该房间在指定日期是否有预订。通过一些研究,我发现完全连接将是正确的连接,因为它显示了两个表中的所有字段。由于 MySQL 不支持完全连接,我找到了一种方法来模拟它使用
SELECT * FROM ROOMS r
LEFT JOIN RESERVATIONS rs ON r.RoomNumber = rs.RoomNumberReserved
UNION
SELECT * FROM ROOMS r
RIGHT JOIN RESERVATIONS rs ON r.RoomNumber = rs.RoomNumberReserved
WHERE
rs.CheckInDate <= CURRENT_DATE
AND CAST((rs.CheckInDate + rs.NumberOfNights) AS DATE) > CURRENT_DATE
Where 子句基本上说只显示入住日期在该日期之前或之后的预订,以及在该日期之后的退房日期。基本上显示在该日期有效的预订。
但是,示例保留显示 100% 的时间,即使它不符合 where 子句的条件。查询的关键部分的联接运行良好,因为预订显示在正确的房间旁边,但看起来 where 子句没有按预期运行。
我不确定如何进行此操作,因此如果能帮助我走上正轨,我们将不胜感激。
谢谢
【问题讨论】:
标签: mysql join where-clause