首页 > 解决方案 > 车库里有多少辆车?在两个表中选择(Mysql)

问题描述

情况:

我有一张有五辆车的桌子。

桌车:id_car、name_car

在另一张表中是汽车在车库外的时间段。

缺勤表:id_absence、car_id、department_date、return_date

问题:选择某一天(例如当天)在车库中的汽车。

很多天后,我来到:

SELECT  c.*, a.*
FROM cars c
LEFT JOIN  absences a
ON  c.id_car = a.car_id 
AND ('2019-04-02' NOT BETWEEN a.departure_date AND a.return_date)

它不起作用,因为尽管汽车不存在,但它似乎已被选中,其余字段为 NULL。

使用 INNER JOIN 它也不起作用。

标签: mysql

解决方案


对您的查询进行一些修复,使其成为“反加入”:

SELECT  c.*
FROM cars c
LEFT JOIN  absences a
  ON  c.id_car = a.car_id 
  AND '2019-04-02' BETWEEN a.departure_date AND a.return_date
WHERE a.car_id IS NULL

使用 NOT EXISTS 子查询可以获得相同的结果:

SELECT  c.*
FROM cars c
WHERE NOT EXISTS (
    SELECT *
    FROM absences a
    WHERE c.id_car = a.car_id
      AND '2019-04-02' BETWEEN a.departure_date AND a.return_date
)

推荐阅读