代码之家  ›  专栏  ›  技术社区  ›  Tadas T

在日期范围为0的其他表上联接

  •  0
  • Tadas T  · 技术社区  · 14 年前

    我有两个关联的表(简化模式)

    mysql> describe booking;
    +----------------+------------+
    | Field          | Type       |
    +----------------+------------+
    | id             | int(11)    |
    | room_id        | int(11)    |
    | date_from      | date       |
    | date_to        | date       |
    +----------------+------------+   
    
    mysql> describe room;       
    +-------------+------------+
    | Field       | Type       |
    +-------------+------------+
    | id          | int(11)    |
    | isDouble    | tinyint(1) |
    +-------------+------------+
    

    我需要做的是得到所有的双人房(is double=true),在指定的时间段(日期从,日期到)内没有预订。我想在一个查询中获得结果。

    谢谢你的帮助。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Charles Bretana    14 年前

    尝试:

    Select Distinct id RoomId
    From room r
    Where isDouble = 1
     And Not Exists
       (Select * From booking
        Where room_id = r.id
          And date_from <= @EndDateRange
          And date_to >= @StartDateRange)
    
        2
  •  1
  •   zerkms    14 年前
    SELECT *
      FROM room r
     WHERE r.isDouble
       AND NOT EXISTS (SELECT NULL
                         FROM booking b
                        WHERE (date_from BETWEEN 'date1' AND 'date2'
                           OR date_to BETWEEN 'date1' AND 'date2')
                          AND b.room_id = r.id)
    
        3
  •  0
  •   Richard Marskell - Drackir Sunil Tandon    14 年前

    试试这个: SELECT * FROM room WHERE isDouble = 1 AND id NOT IN (SELECT room_id FROM booking WHERE date_to BETWEEN 'date1' AND 'date2')