2016-12-13 10 views
1

私はこの問題を解決するために努力してきましたが、まだ運がありません。データベース内のクエリ

私は車のデータベースを設定しようとしています。車の利用可能性を確認する場所に、人が入居した日に車を貸し出すことができます。たとえば、2011年11月5日から11月20日まで、2016年10月20日まで車両を借りたいとします。

私は車のテーブルに戻ってクエリを接続することができましたが、私はそれが私にすべての車両が利用可能に表示されているか、それらのどれも表示されませんクエリをテストします。

テーブルと関係を含めて、それぞれのテーブルが私に問題を引き起こしていると思います。

このコードを修正するための提案は非常に高く評価されます。

Relationships Tables

SELECT * 
FROM Vehicles 
WHERE Vehicles.vehicle_id NOT IN 
     (
     SELECT distinct 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

私はleft joinと考える:

select v.* 
from vehicles v left join 
    bookings b 
    on v.vehicle_id = b.vehicle_id and 
     b.start_rent_date <= @EnterEndDate and 
     b.end_rent_date >= @EnterStartDate 
where b.vehicle_id is null; 

所望の最終日前に開始され、それが後に終了レンタルがある場合、車両は無料ではありません希望の開始日。 left joinにはこれらが含まれていません。同等のロジックには、NOT EXISTSまたはNOT INを使用することもできます。

編集:

あなたはMS Accessを使用しています。 。 。

select v.* 
from vehicles as v left join 
    (select b.* 
     from bookings as b 
     where b.start_rent_date <= @EnterEndDate and 
      b.end_rent_date >= @EnterStartDate 
    ) as b 
    on v.vehicle_id = b.vehicle_id 
where b.vehicle_id is null; 
+0

iが不足しているオペレータのために、彼らはそれは開始時に私のために働いていた –

+0

が起きかもしれないが、私はそれをしようとすると、今、すべての車両が任意のアイデアどのように現れている理由を任意のアイデアを構文エラーを取得していますそれは起こっている –

+0

nevermindは、間違った方法の男に日付を入力していた...ありがとう、私はこれを解決しようとしている時間のカップルだった私はあなたにもう一度ありがとう –

0
SELECT * 
FROM Vehicles 
WHERE Vehicles.vehicle_id NOT IN (
            SELECT distinct D1.[vehicle id] 
            FROM Booking D1 
            WHERE (DATEDIFF(DAY, D1.start_rent_date, @Enter_Start_Date)>=0 
              And DATEDIFF(DAY, D1.end_rent_date, @Enter_Start_Date)<=0 
              ) 
              OR 
              (
              DATEDIFF(DAY, D1.start_rent_date, @Enter_End_Date)>=0 
              And DATEDIFF(DAY, D1.end_rent_date, @Enter_End_Date)<=0 
              ) 
              OR 
              (
              DATEDIFF(DAY, D1.start_rent_date, @Enter_Start_Date)<=0 
              And DATEDIFF(DAY, D1.end_rent_date, @Enter_End_Date)>=0 
              ) 
            ); 
関連する問題