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テーブルと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 に答える