mysql预订预订查询

时间:2018-01-16 21:39:34

标签: mysql date where

我有以下数据集:

CREATE TABLE IF NOT EXISTS `cars` (
  `car_id` int(11) NOT NULL AUTO_INCREMENT,
  `car_name` varchar(20) NOT NULL,
  PRIMARY KEY (`car_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `cars` (`car_id`, `car_name`) VALUES
(1, 'Mercedes'),
(2, 'BMW');
CREATE TABLE IF NOT EXISTS `orders` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `order_car_id` int(11) NOT NULL,
  `order_date_checkin` datetime DEFAULT NULL,
  `order_date_dropoff` datetime DEFAULT NULL,
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

INSERT INTO `orders` (`order_id`, `order_car_id`, `order_date_checkin`, `order_date_dropoff`) VALUES
(1, 1, '2018-01-17 10:00:00', '2018-01-19 21:00:00'),
(2, 1, '2018-01-22 14:00:00', '2018-01-25 17:00:00');

我只需要检查日期范围内是否有车。我需要这个条件:

时不要返回梅赛德斯
Check in date    Check out date
2018-01-16       2018-01-20
2018-01-17       2018-01-20
2018-01-17       2018-01-21

在以下情况下退回梅赛德斯:

Check in date    Check out date
2018-01-16       2018-01-16
2018-01-16       2018-01-17
2018-01-19       2018-01-21
2018-01-20       2018-01-21
2018-01-27       2018-01-30

我的数据库位于以下链接:http://sqlfiddle.com/#!9/28a38d/1

1 个答案:

答案 0 :(得分:2)

DROP TABLE IF EXISTS rules;

CREATE TABLE rules
(rule_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,Check_in_date DATE NOT NULL
,Check_out_date DATE NOT NULL
);

INSERT INTO rules (Check_in_date,Check_out_date) VALUES
('2018-01-16','2018-01-20'),
('2018-01-17','2018-01-20'),
('2018-01-17','2018-01-21'),
('2018-01-16','2018-01-16'),
('2018-01-16','2018-01-17'),
('2018-01-19','2018-01-21'),
('2018-01-20','2018-01-21'),
('2018-01-27','2018-01-30');

SELECT c.*
     , r.* 
  FROM cars c 
  JOIN rules r 
  LEFT 
  JOIN orders o 
    ON o.order_car_id = c.car_id 
   AND o.order_date_checkin <= r.check_out_date -- may be you meant <
   AND o.order_date_dropoff >= r.check_in_date  -- may be you meant >
 WHERE o.order_id IS NULL;
+--------+----------+---------+---------------+----------------+
| car_id | car_name | rule_id | Check_in_date | Check_out_date |
+--------+----------+---------+---------------+----------------+
|      2 | BMW      |       1 | 2018-01-16    | 2018-01-20     |
|      2 | BMW      |       2 | 2018-01-17    | 2018-01-20     |
|      2 | BMW      |       3 | 2018-01-17    | 2018-01-21     |
|      1 | Mercedes |       4 | 2018-01-16    | 2018-01-16     |
|      2 | BMW      |       4 | 2018-01-16    | 2018-01-16     |
|      1 | Mercedes |       5 | 2018-01-16    | 2018-01-17     |
|      2 | BMW      |       5 | 2018-01-16    | 2018-01-17     |
|      2 | BMW      |       6 | 2018-01-19    | 2018-01-21     |
|      1 | Mercedes |       7 | 2018-01-20    | 2018-01-21     |
|      2 | BMW      |       7 | 2018-01-20    | 2018-01-21     |
|      1 | Mercedes |       8 | 2018-01-27    | 2018-01-30     |
|      2 | BMW      |       8 | 2018-01-27    | 2018-01-30     |
+--------+----------+---------+---------------+----------------+
相关问题