我试图编写一个SELECT语句,以排除在给定日期已经预订汽车的结果。
我的代码从表Car_Details中选择信息,并链接到表Booking_Details以获取已经预定汽车的日期。
“ AA11 AAA”汽车在“ 2019-05-09”和“ 2019-05-08”两天都被预订,而“ BB22 BBB”汽车在任何一天都没有预订。
使用注册表项Car_Registration链接表
SELECT Car_Details.Car_Registration
FROM Car_Details, Booking_Details
WHERE Car_Details.Car_Active='Y'
AND NOT(Booking_Details.Car_Registration=Car_Details.Car_Registration)
AND Booking_Details.Booking_Date='2019-05-09')
GROUP BY Car_Details.Car_Registration;
奔跑时,我希望结果只会是'BB22 BBB'赛车,相反我会同时出现'AA11 AAA'和'BB22 BBB'赛车。
如何编辑此代码,以便仅显示汽车“ BB22 BBB”?
答案 0 :(得分:-1)
您可以通过以下两种方式执行此操作,在Booking_Details中的值为null的情况下,LEFT OUTER JOIN将起作用并过滤结果,但是我认为使用子查询来执行此操作可能会更快,我必须对此进行研究,但根据此StackOverflow帖子(Join vs. sub-query),LEFT OUTER JOIN可以比子查询快,但是仅当表中的行数较小时(如果预订表的大小可以增长到100k以上)记录,那么子查询在没有每个草莓的聚集函数的情况下具有更好的性能,无需修改,使用子查询方法时GROUP BY是不必要的,因为它不会返回重复项:
SELECT car.Car_Registration
FROM Car_Details AS car
WHERE car.Car_Active = 'Y' AND
car.Car_Registration NOT IN (
SELECT Car_Registration
FROM Booking_Details
WHERE Booking_Date='2019-05-09'
);