0

大家好,我在尝试在我设置的数据库上运行查询时遇到问题。我正在建立一个车辆租赁数据库,并且我正在尝试运行查询以查看在两个日期之间可以租用的车辆。我有两个表参与查询车辆预订和车辆数据库。当我运行查询时,我可以看到可用的车辆,但它只显示与预订数据库有关的结果。(也出现了重复值)有没有一种方法可以传递数据以向我显示基于车辆表中所有车辆的结果。抱歉,如果这有点令人困惑,任何提示都非常感谢。

 SELECT Vehicles.[Vehicle ID]
    ,Vehicles.Make
    ,Vehicles.Model
    ,Vehicles.[Type of Vehicle]
    ,Vehicles.Year
    ,Vehicles.Colour
    ,Vehicles.[Price/ Per Day]
    ,Vehicles.[Out of Service]
    ,Booking.End_Rent_Date
    ,Booking.Start_Rent_Date
FROM Vehicles
INNER JOIN Booking
    ON Vehicles.[Vehicle ID] = Booking.[Vehicle ID]
WHERE End_Rent_Date < [enter start date]
    OR [enter end date] < Start_Rent_Date;
4

2 回答 2

1
SELECT *
FROM Vehicles
WHERE Vehicles.vehicle_id NOT IN (
        SELECT Vehicle.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
                )
        )

您必须获取在这些日期之间租用的汽车集并将它们从您的查询中排除,这就是您使用not in.

查询是对的,您只需要编辑开始/结束日期部分。

于 2016-12-12T14:59:11.443 回答
0

- 显示所有可用车辆:

SELECT * 
FROM   vehicles x1 
WHERE  x1.vehicle_id NOT IN 
   ( 
          SELECT vehicle_id 
          FROM   booking x2 
          WHERE  ( 
                        enter_start_date BETWEEN x2.start_rent_date AND    
x2.end_rent_date) 
          OR     ( 
                        enter_end_date BETWEEN x2.start_rent_date AND    
x2.end_rent_date)
于 2016-12-12T14:33:43.170 回答