预订查询

a2mppw5e  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(390)

我有以下数据集:

  1. CREATE TABLE IF NOT EXISTS `cars` (
  2. `car_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `car_name` varchar(20) NOT NULL,
  4. PRIMARY KEY (`car_id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  6. INSERT INTO `cars` (`car_id`, `car_name`) VALUES
  7. (1, 'Mercedes'),
  8. (2, 'BMW');
  9. CREATE TABLE IF NOT EXISTS `orders` (
  10. `order_id` int(11) NOT NULL AUTO_INCREMENT,
  11. `order_car_id` int(11) NOT NULL,
  12. `order_date_checkin` datetime DEFAULT NULL,
  13. `order_date_dropoff` datetime DEFAULT NULL,
  14. PRIMARY KEY (`order_id`)
  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  16. INSERT INTO `orders` (`order_id`, `order_car_id`, `order_date_checkin`, `order_date_dropoff`) VALUES
  17. (1, 1, '2018-01-17 10:00:00', '2018-01-19 21:00:00'),
  18. (2, 1, '2018-01-22 14:00:00', '2018-01-25 17:00:00');

我只需要检查一下车是否在日期范围内。我需要这个条件:
什么时候不还梅赛德斯

  1. Check in date Check out date
  2. 2018-01-16 2018-01-20
  3. 2018-01-17 2018-01-20
  4. 2018-01-17 2018-01-21

返回梅赛德斯时:

  1. Check in date Check out date
  2. 2018-01-16 2018-01-16
  3. 2018-01-16 2018-01-17
  4. 2018-01-19 2018-01-21
  5. 2018-01-20 2018-01-21
  6. 2018-01-27 2018-01-30

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

iaqfqrcu

iaqfqrcu1#

  1. DROP TABLE IF EXISTS rules;
  2. CREATE TABLE rules
  3. (rule_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  4. ,Check_in_date DATE NOT NULL
  5. ,Check_out_date DATE NOT NULL
  6. );
  7. INSERT INTO rules (Check_in_date,Check_out_date) VALUES
  8. ('2018-01-16','2018-01-20'),
  9. ('2018-01-17','2018-01-20'),
  10. ('2018-01-17','2018-01-21'),
  11. ('2018-01-16','2018-01-16'),
  12. ('2018-01-16','2018-01-17'),
  13. ('2018-01-19','2018-01-21'),
  14. ('2018-01-20','2018-01-21'),
  15. ('2018-01-27','2018-01-30');
  16. SELECT c.*
  17. , r.*
  18. FROM cars c
  19. JOIN rules r
  20. LEFT
  21. JOIN orders o
  22. ON o.order_car_id = c.car_id
  23. AND o.order_date_checkin <= r.check_out_date -- may be you meant <
  24. AND o.order_date_dropoff >= r.check_in_date -- may be you meant >
  25. WHERE o.order_id IS NULL;
  26. +--------+----------+---------+---------------+----------------+
  27. | car_id | car_name | rule_id | Check_in_date | Check_out_date |
  28. +--------+----------+---------+---------------+----------------+
  29. | 2 | BMW | 1 | 2018-01-16 | 2018-01-20 |
  30. | 2 | BMW | 2 | 2018-01-17 | 2018-01-20 |
  31. | 2 | BMW | 3 | 2018-01-17 | 2018-01-21 |
  32. | 1 | Mercedes | 4 | 2018-01-16 | 2018-01-16 |
  33. | 2 | BMW | 4 | 2018-01-16 | 2018-01-16 |
  34. | 1 | Mercedes | 5 | 2018-01-16 | 2018-01-17 |
  35. | 2 | BMW | 5 | 2018-01-16 | 2018-01-17 |
  36. | 2 | BMW | 6 | 2018-01-19 | 2018-01-21 |
  37. | 1 | Mercedes | 7 | 2018-01-20 | 2018-01-21 |
  38. | 2 | BMW | 7 | 2018-01-20 | 2018-01-21 |
  39. | 1 | Mercedes | 8 | 2018-01-27 | 2018-01-30 |
  40. | 2 | BMW | 8 | 2018-01-27 | 2018-01-30 |
  41. +--------+----------+---------+---------------+----------------+
展开查看全部

相关问题