我知道標題真的很荒謬。我無法找到我如何描述這一點。如何從表中刪除結果到另一個表?
這是我的表結構
這是一個汽車租賃網頁。我正在做的是我試圖找出一輛車是否特別保留「pickup日期」和「下降日期」。 我可以得到這個查詢
SELECT
cars.model,
reservations.pickup_date,
reservations.dropoff_date,
reservations.car_id
FROM
cars
INNER JOIN reservations ON cars.car_id = reservations.car_id
WHERE
reservations.pickup_date <= '2012-04-08 10:50:26' OR
reservations.dropoff_date >= '2012-04-20 10:50:26'
保留汽車不過,也有一些車沒有被保留,他們沒有在此查詢顯示,因爲我不知道所有車型的預訂。我有他們在汽車表。
底線是,我應該消除從具有所有車型的表中的此查詢中得到的結果。因此,我將擁有未預訂的汽車+在預訂日期之後提供的汽車。
它會得到我從查詢中得到的結果,並從汽車表中消除該結果。之後它會顯示我。
我可以用PHP來做到這一點。但是,我想了解是否可以使用mysql執行一個查詢。
這是我與@cbuckley
SELECT
cars.*
FROM cars
LEFT JOIN (
SELECT
cars.car_id
FROM
cars
INNER JOIN reservations
ON cars.car_id = reservations.car_id
WHERE
(reservations.pickup_date <= '2012-04-08 10:50:26' AND reservations.dropoff_date >= '2012-04-20 10:50:26') OR
(reservations.pickup_date >= '2012-04-08 10:50:26' AND reservations.pickup_date <= '2012-04-20 10:50:26') OR
(reservations.dropoff_date <= '2012-04-20 10:50:26' AND reservations.dropoff_date >= '2012-04-08 10:50:26')
) AS reserved_cars
ON reserved_cars.car_id = cars.car_id
WHERE reserved_cars.car_id IS NULL;
現在它顯示了不是「保留」的汽車。但它不顯示不在保留期內的那些。例如,我有預訂,pickup pickup日期是「2012-04-21」,dropoff_date是「2012-04-26」。它應該告訴我這個查詢。它只顯示那些沒有保留的。 – SNaRe
我不太確定我是否理解你的原始問題。看起來你想要返回所有與你的查詢不匹配的汽車,這是上面所做的。你的最終目標是什麼?你想在2個日期之間返回所有可用的汽車嗎?如果是這樣,我將編輯內部查詢。如果不是,請在這裏或在您的問題中澄清。 – cmbuckley
我更關注算法。我意識到還有其他條件需要考慮。我更新了我的問題。你可以看到解決方案。謝謝你的幫助。 – SNaRe