【问题标题】:selecting room type on room availability subquery在房间可用性子查询中选择房间类型
【发布时间】:2013-01-17 13:35:45
【问题描述】:

餐桌预留

  • reserve_id
  • roominv_id
  • 检查
  • 退出
  • 状态(已保留、已取消、待定)

桌房库存

  • roominv_id
  • room_id
  • 房间号
  • room_status(可用,不可用)

餐桌

  • room_id
  • 房间类型

我正在做一个房间预订系统。

我已经查询了房间的可用日期:

SELECT r.roominv_id,r.room_id 
FROM roominventory r
WHERE r.roominv_id
NOT IN 
(SELECT b.roominv_id
FROM reserve b
WHERE NOT (b.chckout < '$chckin'
OR
b.chckin > '$chckout'))

我的问题是,我将在查询中的哪里插入条件,我可以在哪里选择特定的房间类型取决于房间的可用性。

我知道它类似于room.room_type LIKE '%$roomtype%',但我不知道我将在查询的哪个部分插入它。

【问题讨论】:

    标签: sql


    【解决方案1】:

    这是使用LEFT JOIN 并检查NULL 的替代方法:

    SELECT 
      r.roominv_id, 
      r.room_id 
    FROM roominventory AS r
        INNER JOIN room AS m ON m.room_id = r.room_id
        LEFT JOIN reserve res ON r.roominv_id = res.roominv_id AND
                   NOT (b.chckout < '$chckin' OR b.chckin > '$chckout')
    WHERE m.room_type LIKE '%$roomtype%' 
        AND res.roominv_id IS NULL
    

    祝你好运。

    【讨论】:

      【解决方案2】:

      你可以像这样JOIN桌子room:

      SELECT 
        r.roominv_id, 
        r.room_id 
      FROM roominventory AS r
      INNER JOIN room AS m ON m.room_id = r.room_id
      WHERE m.room_type LIKE '%$roomtype%'
        AND r.roominv_id NOT IN (SELECT b.roominv_id
                                 FROM reserve b
                                 WHERE NOT (b.chckout < '$chckin'
                                            OR 
                                            b.chckin > '$chckout'));
      

      【讨论】:

        猜你喜欢
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 2019-05-22
        • 2016-08-12
        • 2015-04-04
        • 1970-01-01
        相关资源
        最近更新 更多