我有一个表,想要对它自己进行查询,但不确定如何操作。
表名:schedule
- user_id
- startdate
- enddate
- sequencyID
情况是,我有许多行,其中 user_id = 0。这表示存在开放的日程表,可以由任何人来申领。如果有人申领了某个日程,那么该日程就会被分配到特定的用户 ID 上。这里涉及到的难点在于,我正在尝试选择一个用户,并显示他们还没有接受或安排的时间表,以避免与已经接受或安排的时间表重叠。
以下是我目前的进展:
SELECT *
FROM schedule
WHERE user_id = 123456;
这让我获得了一个人已经接受的所有时间范围。
SELECT *
FROM schedule
WHERE user_id = 0;
这段代码可以获取所有可用的日程行。但我不太确定如何将它们组合在一起,使最终结果是一个用户ID为0且开始日期/结束日期不存在于已分配用户的开始日期和结束日期之间的日程元素列表。
我认为应该像这样:
SELECT *
FROM schedule
WHERE user_id = 0
AND (loop through schedule rows testing for
(startdate < loopstartdate and enddate < loopstartdate) ||
(startdate > loopenddate)
我正在苦恼的是“where”这个问题。有什么想法吗?如果有人能够至少指出我开始解决这类问题所需使用的机制,那就太棒了。