0

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

每辆用于旅行的车辆在其行中都有一个开始和结束日期,表示旅行的开始和结束时间,因此该车辆不可用。

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

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

请问有什么我想念的线索吗?

4

2 回答 2

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
)
于 2012-11-11T18:23:06.243 回答
1

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

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

另一方面,正如语法突出显示的那样,return不是来自列名的名。它是 Oracle 中的保留字,如果可以,您应该避免使用它。

于 2012-11-11T18:23:51.977 回答