我正在研究车辆预订系统,并有两个名为: VehicleBookingStatus和VehicleDetails
它们与通常的Vehicle_Id的主要外国概念相关联。
我的车辆1(ID)是在1月5日到1月10日之间预订的。所以我需要对这两张表进行连接查询,这可以根据可用性给出结果。
例如:车辆不适用于3种情况。
我创建了SP,如下所示,但它没有给我想要的输出:
Select
VehicleDetails.Vehicle_Id,
VehicleDetails.Vehicle_Name,
VehicleDetails.Vehicle_Capacity
from VehicleDetails
left join VehicleBookingStatus on
VehicleDetails.Vehicle_Id = VehicleBookingStatus.Vehicle_ID
where
((@UserDate NOT between VehicleBookingStatus.Assign_Date and VehicleBookingStatus.Return_Date)
AND
(@UserEndDate not between VehicleBookingStatus.Assign_Date and VehicleBookingStatus.Return_Date))
OR
((@UserDate not between VehicleBookingStatus.Assign_Date and VehicleBookingStatus.Return_Date)
and (@UserEndDate > VehicleBookingStatus.Return_Date))
@UserDate和@UserEndDate将由用户提供。
感谢。
答案 0 :(得分:1)
试试这个;
Select v.Vehicle_Id, v.Vehicle_Name, v.Vehicle_Capacity
from VehicleDetails v left join VehicleBookingStatus b
on v.Vehicle_Id = b.Vehicle_ID
where b.Assign_Date is null or NOT (
b.Return_Date between @UserDate and @UserEndDate OR
b.Assign_Date between @UserDate and @UserEndDate OR
(b.Assign_Date < @UserDate AND b.Return_Date > @UserEndDate) )
答案 1 :(得分:0)
select
vd.Vehicle_Id
, vd.Vehicle_Name
, vd.Vehicle_Capacity
from VehicleDetails vd
left join VehicleBookingStatus vbs on vd.Vehicle_Id = vbs.Vehicle_ID
where NOT (@UserDate <= vbs.Return_Date AND @UserEndDate >= vbs.Assign_Date)
答案 2 :(得分:0)
我假设您希望查询返回可在指定时间段内预订的车辆的详细信息。
在@UserDate之前结束的预订,或者那个 在@UserEndDate没问题后启动。
因此,车辆不可用的条件是 它有预订,它们都在@UserEndDate之前或之后开始,以及 也在@UserDate之后或之后结束。
然后查询应为:
SELECT VD.Vehicle_Id,
VD.Vehicle_Name,
VD.Vehicle_Capacity
FROM VehicleDetails VD
LEFT JOIN VehicleBookingStatus VBS
ON VD.Vehicle_Id = VBS.Vehicle_ID
AND VBS.Assign_Date <= @UserEndDate
AND VBS.Return_Date >= @UserDate
WHERE VBS.Assign_Date IS NULL
如果新预订可以在前一个预订结束的同一天开始,则可以删除=
个标志。