I have tables which name is given below
1)tblCarName
2)tblVehicle
3)tblModel
4)tblVehicleAvailability
在上面的三张 table 上,我有取得的结果,车辆未被预订,具体型号,然后是特定日期车辆可用或不可用的另一个状态车辆可用状态 .
但我得到的结果是哪辆车不可用 . (表示那些在tblVehicleAvailability表中的车)但我想要那些不在tblVehicleAvailability表中的车)
My Query
select
A.id,
C.vsCarName+' ('+ A.EngineNum+' )' as vsCarName
from tblCarName C
join tblVehicle A on C.id = A.CarId
inner join tblModel B on A.ModelId = B.id
--join tblVehicleAvailability VA on VA.CarId = A.id
WHERE A.id not in
(
SELECT
VehicleId
FROM
tblBooking
WHERE
A.ActiveInactive = 1
AND
Convert(datetime,'2013-09-19 00:00:00.000') --start date
BETWEEN FromDateWithStartTime AND ToDateWithEndTime
OR
Convert(datetime,'2013-09-20 00:00:00.000') --endDate
BETWEEN FromDateWithStartTime AND ToDateWithEndTime
OR
FromDateWithStartTime
BETWEEN Convert(datetime,'2013-09-19 00:00:00.000') --startdate
AND Convert(datetime,'2013-09-20 00:00:00.000') --enddate
OR
ToDateWithEndTime
BETWEEN Convert(datetime,'2013-09-19 00:00:00.000')--start date
AND Convert(datetime,'2013-09-20 00:00:00.000')--enddate
)
AND
A.ModelId='3'
AND
Convert(datetime,'2013-09-19 00:00:00.000') --start date
BETWEEN VA.leaveDate AND VA.leaveToDate
OR
Convert(datetime,'2013-09-20 00:00:00.000') --endDate
BETWEEN VA.leaveDate AND VA.leaveToDate
OR
VA.leaveDate
BETWEEN Convert(datetime,'2013-09-19 00:00:00.000') --startdate
AND Convert(datetime,'2013-09-20 00:00:00.000') --enddate
OR
VA.leaveToDate
BETWEEN Convert(datetime,'2013-09-19 00:00:00.000') --start date
AND Convert(datetime,'2013-09-20 00:00:00.000')
2 回答
试试这个:
通常当我看到“OR”语句时,我开始添加(),这样我得到了我想要的东西 .
编辑:但您可能还想看看使用LEFT JOIN tblVehicleAvailability
和另外的where子句:
WHERE CarID为NULL
最好的问候,亨里克