aqui lo que podrias hacer seria tener en tu tabla de horarios la hora inicio y la hora final, y en tu tabla de reservaciones poner algo asi:
tu capturas la hora inicial y la hora final digamos(con datos de hora 1,2,3) que la hora de ingreso es la 1 y la de salida las 3 asi que la mesa estara apartada todo el tiempo entre la hora 1 y la 3.
algo asi:
Código SQL:
Ver originalCREATE TABLE #horarios(
id INT,
hora_inicio INT,
hora_fin INT
)
CREATE TABLE #mesa(
id INT,
nombre VARCHAR(10)
)
--drop table #reservaciones
CREATE TABLE #reservaciones(
id INT,
id_horario_i INT,
id_horario_f INT,
id_mesa INT,
fecha VARCHAR(20)
)
INSERT INTO #horarios VALUES (1,1,2)
INSERT INTO #horarios VALUES (2,2,3)
INSERT INTO #horarios VALUES (3,3,4)
INSERT INTO #horarios VALUES (4,4,5)
INSERT INTO #mesa VALUES (1,'mesa1')
INSERT INTO #mesa VALUES (2,'mesa2')
INSERT INTO #mesa VALUES (3,'mesa3')
INSERT INTO #reservaciones VALUES (1,1,2,1,CONVERT(VARCHAR(20),GETDATE(),101))
INSERT INTO #reservaciones VALUES (1,3,4,1,CONVERT(VARCHAR(20),GETDATE(),101))
--Horas ocupadas
SELECT m.nombre,h.hora_inicio,h.hora_fin,r.fecha FROM #reservaciones AS r,#horarios AS h, #mesa AS m
WHERE r.id_horario_i=h.id AND m.id=r.id_mesa AND fecha=CONVERT(VARCHAR(20),GETDATE(),101)
AND id_mesa=1 AND h.id IN (SELECT id FROM #horarios WHERE (hora_inicio BETWEEN 1 AND 5) AND (hora_fin
BETWEEN 1 AND 5) )
ORDER BY m.nombre
--Horas Libres
SELECT DISTINCT hora_inicio,hora_fin,nombre,fecha FROM #reservaciones AS r,#horarios AS h, #mesa AS m
WHERE fecha=CONVERT(VARCHAR(20),GETDATE(),101) AND CONVERT(VARCHAR(20),h.id) + '|' + CONVERT(VARCHAR(20),m.id) NOT IN (
SELECT CONVERT(VARCHAR(20),id_horario_i) + '|' + CONVERT(VARCHAR(20),id_mesa) FROM #horarios,#reservaciones WHERE #horarios.id=#reservaciones.id_horario_i AND #reservaciones.fecha=CONVERT(VARCHAR(20),GETDATE(),101)
)
ORDER BY nombre