我正在为一家提供驾驶体验的公司创建预订系统。该公司在驾驶会议期间为客户雇用汽车。我有一个驾驶会议预订表,存储每个预订;驾驶会议表,其中包含每个驾驶会话的日期和时间;还有一张车牌,里面装着公司可以租用的每辆车。驾驶会话预订表通过外键链接到驾驶会话表,并且同样通过另一个外键链接到汽车表。
为了向客户提供他们可以在他们选择的驾驶会话中驾驶哪些车辆的列表,我想执行一个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 :(得分: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
。
我还在查询中添加了合理的表别名,使其更易于理解。
答案 1 :(得分: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;