【问题标题】:Give a list of booked rooms for months of May, Jun And July 2009, having price greater than 8000 per day给出 2009 年 5 月、6 月和 7 月的预订房间清单,价格超过 8000 元/天
【发布时间】:2014-08-19 14:03:45
【问题描述】:

表格

Hotel    (hotelNo, HotelName, city)

Room     (roomNo, hotelNo, type, price)

Booking  (hotelNo, guestNo, dateFrom, dateTo, roomNo)

Guest    (guestNo, guestName, guestAddress)

根据上表给出以下查询的结构化查询语言语法:

给出 2009 年 5 月、6 月和 2009 年 7 月月份预订房间的清单,价格超过每天 8000 元。

我尝试了以下方法,但它不起作用:

SELECT *
FROM Booking 
WHERE HotleNo IN (SELECT HotelNo FROM Room WHERE Price>8000)
AND (DateFrom>= '2009-05-01' AND dateTo<= '2009-07-31');

【问题讨论】:

  • 如果您阅读 MySQL 中的错误消息,您可能自己发现了拼写错误...
  • 我没有sql server 朋友

标签: mysql sql database date


【解决方案1】:

价格是房间属性而不是酒店属性。但我猜你可能正在处理几个重叠房间号的酒店,所以 你必须匹配 roomNo 和 hotelNo

SELECT *
FROM Booking 
JOIN Room on Booking.roomNo=Room.roomNo and Booking.hotleNo=Room.hotleNo
WHERE Room.Price>8000
AND Booking.DateFrom>= '2009-05-01' 
AND Booking.dateTo<= '2009-07-31'

编辑:在您的问题中,该字段是 hotleNo,所以我会坚持使用该字段名称

【讨论】:

  • 啊,是的,我错过了。连接应该在roomNo,而不是hotelNo。
【解决方案2】:

你可以试试下面的。由于您需要的所有信息都可以从 Booking 和 Room 表中检索到,因此您只需加入 2 并获取数据即可。

select B.* from Booking B
left outer join Room  R   
on    R.roomNo   = B.roomNo
where B.dateFrom >= '2009-05-01'
and   B.dateTo   <=   '2009-07-31'
and   R.price    > 8000

【讨论】:

  • 需要任何 printsys 吗?
  • 为什么是左外连接??
  • 为什么加入HotelNo?
  • HotelNo,roomNo 和 guestNo 是主键
  • 我认为预订与房间而不是酒店有关。而左外连接则是检索所有的预订数据,以及对应的房间数据
猜你喜欢
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多