如何停止SELECT语句中出现的无效结果

时间:2019-05-08 13:58:01

标签: mysql

我试图编写一个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”?

1 个答案:

答案 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'
                                   );