Мне кажется, что запросом в БД эту задачу не решить и нужно реализовывать эту логику на стороне приложения.
Т.е. получаем на нужную дату work_times и все orders, и уже там высчитываем свободное время
Ок, тогда рассчитать один раз и положить в бд, дальше пересчитывать по необходимости конкретные дни (обновление часов работы, добавление заказа, и т п)
Думаю, можно еще посмотреть в сторону User-defined Aggregates
Но я бы на стороне приложения аггрегировал данные (с кэшем или без, в зависимости от нагрузки)
Вопроса не совсем понял, но если имеется в виду вывести данные из обеих таблиц (без join), то можно использовать UNION (SELECT x,y,z FROM table1 UNION SELECT x1,y1,z1 FROM table2). Потом можно сверху ORDER настроить.
NubasLol, А какая-то связь есть между таблицами? (ID?)
Если нет, то включено ли время work item внутрь заказа? (или наоборот).
Т.е. если есть ID, то это банальный join
SELECT wi.date, wi.start, wi.end, o.start, o.end
FROM work_items AS wi
JOIN orders AS o ON o.ID = wi.Orders_ID
со временем сложнее, но по той же схеме примерно (если один интервал в другой включен, если 1 заказ в день (или 1 ворк айтем в день)).