2012-03-16 44 views
0

我不知道如何表达这个问题,很好的词形式,所以决定用图片来帮助我。访问SQL NOT BETWEEN涉及子表单

这是我的表和它们之间的关系: enter image description here

,这里是我卡上的形式: enter image description here

我试图使窗体以便当开始日期和输入一个结束日期后,会在大篷车组合框的行源中查询一个查询,该查询会显示在此期间未预订的所有大篷车。目前我的SQL技能受到限制,因为我目前正在为这个项目学习它们。这是SQL查询到目前为止,我还做:

SELECT tblCaravan.caravanID, tblCaravan.caravanType 
FROM tblCaravan, tblCaravansWeeksBooked 
WHERE (((tblCaravansWeeksBooked.startDate) Not Between [txtStartDate] And [txtEndDate]) 
AND ((tblCaravansWeeksBooked.endDate) Not Between [txtStartDate] And [txtEndDate])); 

我有马帮组合框重新查询本身时,它已经重点访问使用宏。

问题是我所做的SQL没有工作,我看不出为什么。我把它通过使用与被向导建立了两个查询之前这些工作:

SELECT tblCaravansWeeksBooked.startDate, tblCaravansWeeksBooked.endDate, tblCaravansWeeksBooked.caravanID 
FROM tblCaravansWeeksBooked 
WHERE (((tblCaravansWeeksBooked.startDate) Between [Start Date] And [End Date]) 
AND ((tblCaravansWeeksBooked.endDate) Between [Start Date] And [End Date])); 

和 SELECT tblCaravan.caravanID,tblCaravan.caravanType FROM tblCaravan LEFT JOIN qryWeeksBooked ON tblCaravan.caravanID = qryWeeksBooked.caravanID WHERE (((qryWeeksBooked.caravanID)为空));

我希望这里有人能帮助我朝正确的方向发展,感谢所给予的任何帮助。

杰克

回答

2

试试这个

SELECT tblCaravan.caravanID, tblCaravan.caravanType 
FROM tblCaravan 
WHERE caravanID NOT IN (SELECT caravanID FROM tblCaravansWeeksBooked 
         WHERE startDate < Forms!MyForm!txtEndDate AND 
           endDate > Forms!MyForm!txtStartDate) 
+0

它的工作原理完全一样它应该,非常感谢你这一点。我想知道,如果你或其他人能指出我为什么这个工作的方向,而不是我以前使用过的方法。 – 2012-03-16 23:58:01

+0

你的逻辑错误,startdate可能在一段时间之前,enddate在它之后,所以它们都不会在BETWEEN之间,但时间段会重叠。 “从tblCaravan,tblCaravansWeeksBooked'产生一个所谓的笛卡尔积,它将一个表中的所有记录与另一个表中的所有记录结合起来。它没有将商队与有意义的预订联系起来。你会以某种方式加入表格。 – 2012-03-17 16:36:13