2016-12-12 36 views
0

我是SQL新手,我試圖設計一個與汽車租賃公司有關的數據庫。目前我正在檢查是否有車輛可供租用(即是否已租出)。我有兩個不同的表格,一個用於預訂租賃車輛的日期,另一個用於存放我所有車輛的地點。我想我現在有他們連接,但似乎無法讓日期爲我工作,所以我必須有一些錯誤。我還將包含一張表格的圖片,以便您可以查看從哪裏獲取字段名稱。任何幫助深表感謝。試圖做一個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

哪裏'start_date'和'end_date'從何而來? –

+0

將'或'改爲'和'? (不會在隨着時間的推移會變慢,不存在將可能會隨着時間的推移更快 – xQbert

+0

@HARTCO那裏基本上爲查詢paremeter ...我想輸入日期 –

回答

1

主要的問題,我看到的是,你正在測試的開始日期或結束日期是否在預定的時間內發生,但你可能應該檢查是否時段[日期,結束日期]完全與預訂期限重疊。如果佔你看到的錯誤,然後嘗試更改日期邏輯在內部查詢到

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

如果這不是問題,那麼你可能需要更具體談談你得到什麼,它與你的期望有什麼不同。

+0

對不起,如果我讓它混淆,我基本上是試圖獲得可用於租賃的車輛列表。例如,如果我輸入的日期十月十一日至十一月十八日,我想只看看哪些車輛在這段時間內沒有租用..至於你的解決方案,它給了我一個錯誤,當我輸入,而不是我的WHERE子句內的東西 –

+0

我不認爲這是令人困惑的你想要的結果;你需要更清楚地報告錯誤。 「它給了我一個錯誤」並沒有告訴我什麼;錯誤是什麼意思? –

+0

這是我做類似日期查詢的方式。比運營商之間更好。 –

0

它不應該是預訂 .vehicle_id

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

我編輯顯示完整的查詢,但我指的是你的子查詢中的選擇。您只從預訂表中進行選擇,因此您必須從該表中選擇欄位 – Learning2Code

+0

我在桌子上有一些錯誤的名字,但是當我運行它時,有時它甚至在車輛已被預訂時給我所有結果那個日期。 SELECT * FROM車輛 WHERE Vehicles.vehicle_id NOT IN(SELECT 預訂。[車輛ID] 從預訂 WHERE( [輸入開始日期]之間booking.start_rent_date 和booking.end_rent_date ) OR( 回車結束日期] BETWEEN booking.start_rent_date AND booking.end_rent_date ) ); –