情况:
我有一张有五辆车的桌子。
桌车: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也不起作用。
答案 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
)