CREATE TABLE scheduled_availability ( employeeID int(11) NOT NULL default '0', start datetime default NULL, end datetime default NULL ) TYPE=MyISAM; CREATE TABLE appointments ( employeeeID int(11) NOT NULL default '0', start datetime default NULL, end datetime default NULL ) TYPE=MyISAM; CREATE TABLE times ( start datetime default NULL, end datetime default NULL ) TYPE=MyISAM; INSERT INTO times VALUES ('2005-08-16 16:35:40','2005-08-16 17:35:40'); INSERT INTO times VALUES ('2005-08-16 17:35:40','2005-08-16 18:35:40'); INSERT INTO times VALUES ('2005-08-16 18:35:40','2005-08-16 19:35:40'); INSERT INTO times VALUES ('2005-08-16 19:35:40','2005-08-16 20:35:40'); INSERT INTO times VALUES ('2005-08-16 20:35:40','2005-08-16 21:35:40'); INSERT INTO times VALUES ('2005-08-16 21:35:40','2005-08-16 22:35:40'); INSERT INTO times VALUES ('2005-08-16 22:35:40','2005-08-16 23:35:40'); INSERT INTO appointments VALUES (1,'2005-08-16 16:35:40','2005-08-16 17:35:40'); mysql> select times.start, times.end from times, appointments where appointments.start != times.start and appointments.end != times.end; +---------------------+---------------------+ | start | end | +---------------------+---------------------+ | 2005-08-16 17:35:40 | 2005-08-16 18:35:40 | | 2005-08-16 18:35:40 | 2005-08-16 19:35:40 | | 2005-08-16 19:35:40 | 2005-08-16 20:35:40 | | 2005-08-16 20:35:40 | 2005-08-16 21:35:40 | | 2005-08-16 21:35:40 | 2005-08-16 22:35:40 | | 2005-08-16 22:35:40 | 2005-08-16 23:35:40 | +---------------------+---------------------+ 6 rows in set (0.00 sec)