试图做一个NOT IN查询

时间:2016-12-12 18:41:33

标签: sql ms-access

我是SQL的新手,我正在尝试设计一个与汽车租赁公司相关的数据库。目前我正试图检查车辆是否可以租用(即已经租出)。我有两个不同的表,一个用于预订车辆的日期,其中一个用于存储所有车辆。我想我目前让他们联系但似乎无法让我的日期工作,所以我一定有些不对劲。我还将包括表格的图片,以便您可以看到我从哪里获取字段名称。非常感谢任何帮助。

Table fields name

 SELECT *
 FROM Vehicles
 WHERE Vehicles.vehicle_id NOT IN (
 SELECT Booking.[vehicle id]
 FROM Booking
 WHERE (
    [Enter Start Date] BETWEEN booking.start_rent_date
        AND booking.end_rent_date
    )
 OR (
    [Enter End Date] BETWEEN booking.start_rent_date
        AND booking.end_rent_date
    )
  );

2 个答案:

答案 0 :(得分:1)

我看到的主要问题是您正在测试开始日期或结束日期是否在预订期内发生,但您可能应该检查期间[start_date,end_date]是否与预订期间重叠。如果这会导致您查看的错误,请尝试将内部查询中的日期逻辑更改为

    start_date <= booking.enter_end_date
and end_date >= booking.enter_start_date

如果这不是问题,那么您可能需要更具体地了解您所获得的内容以及它与您的期望之间的差异。

答案 1 :(得分:0)

不应该预订 .vehicle_id

SELECT *  FROM Vehicles 
WHERE Vehicles.vehicle_id NOT IN (
SELECT Booking.vehicle_id
FROM Booking
WHERE (
        start_date BETWEEN booking.enter_start_date
            AND booking.enter_end_date
        )
    OR (
        end_date BETWEEN booking.enter_start_date
            AND booking.enter_end_date
        )
    OR (
        booking.enter_start_date BETWEEN start_date
           AND end_date
    )
);