任何人都可以帮我创建一个查询,该查询将填充尚未预订的DJ列表。
我的用户将选择开始日期(和时间),结束日期(和时间) - 然后单击按钮选择DJ。
我只希望那些时段之间可用的DJ出现在列表中。
以下是涉及的两个表
列表框中我需要的只是DJ号码和DJ名称
到目前为止,我有这个...但它没有工作:
SELECT tblDJ.DJ_No AS [DJ ID], tblDJ.DJ_Name AS Name FROM tblDJ
WHERE (((tblDJ.[DJ_No]) Not In
(SELECT tblBooking.[FK_DJ_No]
FROM tblBooking
WHERE ( (tblBooking.End_Date) >= 01-04-2020 19:30:00 )))) ....etc....
我现在只是在这里输入日期,但显然它会在实施后存储在变量中。
谢谢
答案 0 :(得分:1)
SQL中的日期需要包含在两个#
之间,以便MS-Access将其识别为日期:
select *
from tblDJ
where DJ_No not in
(
select FK_DJ_No
from tblBooking
where End_Date >= #2020-04-01 19:30:00#
)
除此之外,您的查询将起作用。
答案 1 :(得分:1)
实现两个时间间隔的OVERLAPS
看起来像:
1st_start_date <= 2nd_end_date and 1st_end_date >= 2nd_start_date
其中1st
和2nd
值是不同事件的标记。
您可以将该逻辑与NOT EXISTS
结合使用,以丢弃在给定时间不可用的dj:
select dj_no, dj_name
from tbldj d
where not exists (
select 1
from tblbooking b
where b.fk_dj_no = d.dj_no
and b.start_date <= #END DATE#
and b.end_date >= #START DATE#
)
您只需将#START DATE#
和#END DATE#
替换为您的值。
这确实有效,因为有以下假设:
这似乎合乎逻辑,对吧?