2016-04-25 148 views
0

對於下面的表,我需要輸出不在master_vehicle_inventory表的member_booking表中的行。 我還需要master_vehicle_inventory的結果,它們不在mb_startdate和mb_returndate的範圍之間。Mysql加入查詢失敗

master_vehicle_inventory table 
mvi_id 
1   
2   
3   
4 

member_booking table 

    mb_id mb_startdate mb_returndate mvi_id 
    100  22-04-2016  30-04-2016  2 
    101  23-01-2016  02-05-2016  3 

到目前爲止,我已經試過這樣:

SELECT 
    mb.mb_id, 
    mb.mb_startdate, 
    mb.mb_returndate, 
    mvi.mvi_id 
FROM master_vehicle_inventory AS mvi LEFT JOIN LEFT 
    JOIN member_booking AS mb ON mvi.mvi_id = mb.mvi_id 
WHERE CURDATE() NOT BETWEEN mb.mb_startdate 
     AND mb.mb_returndate 
     AND mvi.mvi_id NOT IN (SELECT mvi.mvi_id 
          FROM member_booking) 

但它並沒有給結果想。

+0

對不起......問題沒有很好地格式化.... –

+0

嗨,那裏,我編輯身體開始與問題,而不是一張桌子。我也試着理解你的第一個問題並重新編寫它,所以它更容易理解。如果你認爲這不是你想要的,請糾正它。 對於將來的問題,請縮進你的mysql查詢,這樣更容易閱讀。爲了提高你獲得正確答案的機會,你可以給出一個最小的結果,以更好地形象化你的需求。 也嘗試包括錯誤消息,如果有的話。它會幫助人們更好地幫助你!祝你好運! – cb0

+0

Thansk cb0。在這裏有點新,所以沒有想法在問問題時的格式化...我會記住下次 –

回答

0

要從`master_vehicle_inventory`返回`member_booking`表中沒有「匹配」行的行,我們可以使用反連接模式。

假設\ mb_startdate和mb_enddate被定義爲數據類型DATE。

事情是這樣的:

SELECT mvi.mvi_id 
    FROM master_vehicle_inventory mvi 
    LEFT 
    JOIN member_booking mb 
    ON mb.mvi_id  = mvi.mvi_id 
    AND mb.mb_startdate <= DATE(NOW()) 
    AND mb.mb_enddate > DATE(NOW()) 
WHERE mb.mvi_id IS NULL 

給定的日期(NOW())返回 '2016年4月25日'(在一個 「匹配」 行是一個有點含糊規範),我們預計查詢返回的行

mvi_id 
------ 
1 
4 

(我們懷疑是不是列的數據類型可能不日期,因爲在這個例子中數據顯示的數值均爲在YYYY-MM-DD格式中,我們期望返回DATE表達式。)

+0

謝謝100萬spencer7593 ......完美工作 –