2016-12-12 8 views
0

私はSQLを初めて使用しており、車両リース会社との関係でデータベースを設計しようとしています。現時点では、車両のレンタルが可能かどうかをチェックしようとしています(レンタル済みです)。私は、レンタルされる車両の日付が保管されている予約と、すべての車両が保管されている場所の2つの異なるテーブルを用意しています。私は現在彼らに連絡をとってもらえたと思うが、私のために働く日程を取っているようには見えないので、何か間違っている必要がある。また、テーブルの写真も含めて、どこからフィールド名を取得しているかを確認できます。どんな助けも大歓迎です。NOT INクエリを実行しようとしています

Table fields name

SELECT * 
FROM Vehicles 
WHERE Vehicles.vehicle_id NOT IN (
SELECT Booking.[vehicle id] 
FROM Booking 
WHERE (
    [Enter Start Date] BETWEEN booking.start_rent_date 
     AND booking.end_rent_date 
    ) 
OR (
    [Enter End Date] BETWEEN booking.start_rent_date 
     AND booking.end_rent_date 
    ) 
); 
+0

を.vehicle_id –

+0

'または'を 'と'に変更しますか? – xQbert

+0

@HartCOは基本的に質問のためのparemeter ...私は日付を入力したい –

答えて

1

私が見る主な問題は、あなたが開始日や終了日は、予約期間内に発生しているかどうかをテストしているが、あなたはおそらくチェックしなければならないということである期間かどうか[START_DATE、END_DATE ]は予約期間と全く重なっています。それはあなたが見ているエラーを考慮した場合、それは問題ではない場合、あなたはおそらく、あなたが取得しているかについて、より具体的にする必要があり

start_date <= booking.enter_end_date 
and end_date >= booking.enter_start_date 

に内側のクエリで日付・ロジックを変更してみてくださいそれがあなたが期待しているものとどのように異なるか。

+0

私はそれが借りるために利用可能な車のリストを取得するために基本的にしようとしています。例えば、私が11月18日に10月11日に日付を入力した場合、その期間中にどの車両が賃貸されていないかを見たいと思っています。私のWHERE句の代わりに入力すると、あなたの解決策として私にエラーが出る –

+0

私はあなたが望む結果が混乱しているとは思わない。エラーをより明確に報告する必要があります。 "それは私にエラーを与える"何も教えてくれない;エラーは何を言いますか? –

+0

これは私が似た日付のクエリを行う方法です。間の演算子よりも優れています。 –

0

はそれが予約すべきではない場合は、 `start_date`と` end_date`から来るのか?

SELECT * FROM Vehicles 
WHERE Vehicles.vehicle_id NOT IN (
SELECT Booking.vehicle_id 
FROM Booking 
WHERE (
     start_date BETWEEN booking.enter_start_date 
      AND booking.enter_end_date 
     ) 
    OR (
     end_date BETWEEN booking.enter_start_date 
      AND booking.enter_end_date 
     ) 
    OR (
     booking.enter_start_date BETWEEN start_date 
      AND end_date 
    ) 
); 
+0

のコードのうち、 –

+0

の部分を編集して完全なクエリを表示しましたが、私はあなたのサブクエリのSelectを参照していました。あなたは予約テーブルのみから選択しているので、そのテーブルの列を選択する必要があります – Learning2Code

+0

テーブルの名前の一部が間違っていましたが、時にはそれを実行すると、車両が予約されていてもすべての結果が戻ってきますその日。車 Vehicles.vehicle_id NOT IN(SELECT 予約。[車両ID] 予約 WHERE FROM( booking.start_rent_date とbooking.end_rent_date BETWEEN [開始日を入力します]) OR( [終了を入力します。SELECT * FROM日付] BETWEEN booking.start_rent_date AND booking.end_rent_date ) ); –

関連する問題