我有以下架构:
小时表:此表有“常量”数据,它永远不会更改,因为只会存储可安排的小时数
hour (int)
----
8
9
10
约会表
hour (int) | date (text)
--------------------------
10 | 25/08/2015
在我的应用程序中,我想只显示基于小时 - 日期过滤器设置新约会的可用时间。例如,我可以说这些日子:
25/08/2015
:可用时间为8
和9
,因为10
已被占用26/08/2015
:可用时间为8
,9
和10
,因为该日期没有约会。一开始我使用的是这个查询:
select h.hour
from hours h, appointment a
where h.hour != a.hour and a.date = 'the-date';
此查询仅在给定日期中有约会时有效,但对于没有约会的其余日期,它将返回空结果。我可以通过应用程序完成这项任务,但我试图耗尽所有数据库的可能性。
答案 0 :(得分:1)
您可以使用outer join,但子查询可能更容易理解:
SELECT hour
FROM hours
WHERE hour NOT IN (SELECT hour
FROM appointment
WHERE date = ?)