【问题标题】:How many cars are in the garage? Select in two tables (Mysql)车库里有多少辆车?在两个表中选择(Mysql)
【发布时间】:2019-04-02 16:41:10
【问题描述】:

情况:

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

桌车: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 也不起作用。

【问题讨论】:

  • 你可能想要一个子查询和AND NOT EXISTS (...) 而不是一个连接。
  • 选择某一天在车库里的汽车没有意义。一辆车可以在一天内多次进出车库。也许您的意思是选择现在车库里的汽车

标签: mysql


【解决方案1】:

对您的查询进行一些修正,使其成为“反连接”:

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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2014-04-14
    • 2014-12-06
    相关资源
    最近更新 更多