2014-02-23 26 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; 
相关问题