我有2张桌子,其中有时间
第一张表
id time
1. 9:00
2. 10:00
3. 11:00
4. 12:00
5. 01:00
6. 02:00
7. 03:00
第二张表是我的预订表,用户在其中进行约会
id start_time end_time
1. 9:00 10:00
2. 10:00 12:00
3. 02:00 03:00
我想获取第二张表中剩余的可用时间,假设从12:00到01:00的时间是免费的,所以我希望我的查询将选择我需要使用MySQL查询的可用时间,请告诉我做一个查询,因为我不知道我可以使用什么查询来获取可用的时间。非常感谢您的帮助。 谢谢
答案 0 :(得分:0)
DROP TABLE IF EXISTS `appointment`;
CREATE TABLE `appointment` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Start` datetime NOT NULL,
`End` datetime NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into appointment (`Start`,`End`) values ('2019-01-18 09:00:00','2019-01-18 10:00:00'),('2019-01-18 10:00:00','2019-01-18 12:00:00'),('2019-01-18 14:00:00','2019-01-18 15:00:00');
DROP TABLE IF EXISTS `mhc_common`.`schedule`;
CREATE TABLE `mhc_common`.`schedule` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Time` datetime NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into schedule (`Time`) values ('2019-01-18 09:00:00'),('2019-01-18 10:00:00'),('2019-01-18 11:00:00'),('2019-01-18 12:00:00'),('2019-01-18 13:00:00'),('2019-01-18 14:00:00'),('2019-01-18 15:00:00'),('2019-01-18 16:00:00');
尝试此操作以返回可用时间
Select ID
, s.Time
From Schedule s
Left
Join
( SELECT Time
, if((`Time` >= `Start` and `Time` < `End`),'N','Y') NA
FROM appointment a
, schedule b
Having NA = 'N'
) a
On a.Time = s.Time
Where `NA` is Null;