试图找到2个可变日期之间免费的车辆

时间:2012-11-11 18:02:22

标签: sql oracle

我试图找出哪一个(如果有的话)车辆在一对用户输入变量之间是空闲的。

用于旅行的每辆车在行中开始和结束时都有行程开始和结束的时间,因此车辆不可用。

到目前为止,我几乎得到了每个列出的注册,而不是任何类型的过滤结果。

SELECT  vehicle_registration FROM 
(select vehicle_registration
FROM trips
WHERE departure
 not BETWEEN :departure AND :return
and return 
not BETWEEN :departure AND :return)
group by vehicle_registration

有什么线索我还缺少吗?

2 个答案:

答案 0 :(得分:1)

像这样的东西,虽然我可能有> =混合了。假设车辆表和vehicle_id是主键/外键:

此方法的另一个好处是可以显示尚未预订旅行的车辆。

Select
  v.*
From
  vehicle v
Where
  Not Exists (
    Select
      'x'
    From
      trips r
    Where
      r.vehicle_id = v.vehicle_id and
      :return >= r.departure and
      :departure <= r.return
)

答案 1 :(得分:1)

您正在使用AND,这意味着两个条件都必须为真。您需要使用OR代替:

select vehicle_registration
  from trips
 where departure not between :departure and :return
    or return not between :departure and :return

如果没有,如语法高亮显示,return是列名中的错误的名称。这是Oracle中的保留字,如果可以,你应该避免使用它。