2014-02-23 69 views
0

我正在爲提供駕駛體驗的公司創建預訂系統。這家公司出租車讓客戶在駕駛期間駕駛。我有一個駕駛會議預訂表,它存儲了每個預訂;駕駛會話表,其包含每個駕駛會話的日期和時間;還有一張載有公司可以租用的每輛車的車臺。駕駛會話預訂表通過外鍵與駕駛會話表相關聯,並且同樣通過另一外鍵與汽車表相關聯。SQL連接返回所加入列的行不包含任何公共值

要給客戶一個他們可以在他們選擇的駕駛會話中駕駛哪些汽車的列表,我希望執行一個SQL查詢,該查詢將車表中的記錄拉高,其中不是與任何駕駛針對特定駕駛課程的會話預訂。

喜歡的東西:

SELECT 
    * 
FROM 
    tbl_car 
SOME-EXCLUDING-JOIN 
    tbl_driving_session_booking ON tbl_driving_session_booking.FK_CarID = tbl_car.PK_CarID 
INNER JOIN 
    tbl_driving_session ON tbl_driving_session_booking.FK_DrivingSessionID = tbl_driving_session.PK_DrivingSessionID 
WHERE 
    tbl_driving_session.PK_DrivingSessionID = some_value; 

有沒有加入這將使我做到這一點?否則,有沒有其他方式可以找到在中沒有被用於對數據庫進行單個查詢的的汽車?

在此先感謝LC。

回答

0

您想查詢使用left outer join

SELECT c.* 
FROM tbl_car c left outer join 
    tbl_driving_session_booking dsb 
    ON dsb.FK_CarID = c.PK_CarID left outer join 
    tbl_driving_session ds 
    ON dsb.FK_DrivingSessionID = ds.PK_DrivingSessionID and 
     ds.PK_DrivingSessionID = somevalue 
WHERE ds.PK_DrivingSessionID is null; 

請注意,您的病情被移動到on條款的加入。如果沒有匹配,那麼表中的ID將是NULL

我還爲查詢添加了合理的表別名,以使其更容易理解。

0

您可以使用左連接和子查詢來檢測可用汽車。

SELECT * from 
    (SELECT 
    tbl_car.*, tbl_driving_session_booking.FK_DrivingSessionID as flag 
    FROM 
    tbl_car 
    left join 
    tbl_driving_session_booking ON tbl_driving_session_booking.FK_CarID = tbl_car.PK_CarID 
    left join 
    tbl_driving_session ON tbl_driving_session_booking.FK_DrivingSessionID = tbl_driving_session.PK_DrivingSessionID 
    WHERE 
    tbl_driving_session.PK_DrivingSessionID = some_value) 
    where flag is null; 
相關問題