车库里有几辆车?在两个表中选择(Mysql)

时间:2019-04-02 16:41:11

标签: 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也不起作用。

1 个答案:

答案 0 :(得分:0)

对查询进行一些小修正以使其成为“反联接”:

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
)