tienes una tabla reservaciones que tiene los id horarios, solo tendrias que ver que horarios estan dispobibles para cierta mesa :).
algo como esto:
Código SQL:
Ver originalCREATE TABLE #horarios(
id INT,
hora_inicio INT,
hora_fin INT
)
CREATE TABLE #mesa(
id INT,
nombre VARCHAR(10)
)
CREATE TABLE #reservaciones(
id INT,
id_horario 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')
DELETE FROM #reservaciones
INSERT INTO #reservaciones VALUES (1,1,1,CONVERT(VARCHAR(20),GETDATE(),101))
INSERT INTO #reservaciones VALUES (2,2,1,CONVERT(VARCHAR(20),GETDATE(),101))
INSERT INTO #reservaciones VALUES (5,3,1,CONVERT(VARCHAR(20),GETDATE(),101))
INSERT INTO #reservaciones VALUES (6,1,2,CONVERT(VARCHAR(20),GETDATE(),101))
INSERT INTO #reservaciones VALUES (7,3,2,CONVERT(VARCHAR(20),GETDATE(),101))
INSERT INTO #reservaciones VALUES (3,1,1,CONVERT(VARCHAR(20),dateadd(dd,1,GETDATE()),101))
INSERT INTO #reservaciones VALUES (4,2,2,CONVERT(VARCHAR(20),dateadd(dd,1,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=h.id AND m.id=r.id_mesa AND fecha=CONVERT(VARCHAR(20),GETDATE(),101)
--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) + '|' + CONVERT(VARCHAR(20),id_mesa) FROM #horarios,#reservaciones WHERE #horarios.id=#reservaciones.id_horario AND #reservaciones.fecha=CONVERT(VARCHAR(20),GETDATE(),101)
)