SQL与4个表连接

SQL与4个表连接,sql,join,Sql,Join,这里有一个问题,我对外部/内部连接和多个条件有点困惑 我们有4个带-列的表: 表|车辆-id |品牌|类型|许可证 表|设备-id |名称|说明 表|距离-id|车辆|日期|距离 表|车辆|设备-id |车辆| id |设备 第一个查询应该显示所有配备“灭火器”且昨天已经驾驶过的汽车 我已尝试编写此查询: SELECT table_cars_equipments.id_car FROM table_equipments INNER JOIN table_cars_equipments

这里有一个问题,我对外部/内部连接和多个条件有点困惑

我们有4个带-列的表:

  • 表|车辆-id |品牌|类型|许可证
  • 表|设备-id |名称|说明
  • 表|距离-id|车辆|日期|距离
  • 表|车辆|设备-id |车辆| id |设备
  • 第一个查询应该显示所有配备“灭火器”且昨天已经驾驶过的汽车

    我已尝试编写此查询:

    SELECT  table_cars_equipments.id_car
    FROM    table_equipments
    INNER JOIN table_cars_equipments 
        ON table_equipments.id = table_cars_equipments.id_equipment
        AND table_equipments.name LIKE 'fire extinguisher';
    

    虽然我仍然不知道如何添加昨天驾驶过的车辆,但我不知道如何与表
    表\u distance
    建立连接

    将另一个
    连接到
    表中,并将另一个连接到
    表中。然后在
    WHERE
    子句中添加一个条件,以仅获取昨天驾驶过的车辆。大概是这样的:

    SELECT 
      c.id,
      c.brand,
      c.type,
      c.license
      ce.id_car,
      ... 
    from table_equipments AS e
    INNER JOIN table_cars_equipments AS ce ON e.id     = ec.id_equipment 
    INNER JOIN table_cars            AS c  ON c.id     = ce.id_car
    INNER JOIN table_distances       AS d  ON d.id_car = c.id
    WHERE e.name LIKE 'fire extinguisher'
      AND d.date = ?;
    

    注意:我在表
    c
    e
    等中使用了别名,而不是表的全名。

    添加另一个
    与表
    table\u cars
    连接,并在表
    table\u distance
    中添加另一个。然后在
    WHERE
    子句中添加一个条件,以仅获取昨天驾驶过的车辆。大概是这样的:

    SELECT 
      c.id,
      c.brand,
      c.type,
      c.license
      ce.id_car,
      ... 
    from table_equipments AS e
    INNER JOIN table_cars_equipments AS ce ON e.id     = ec.id_equipment 
    INNER JOIN table_cars            AS c  ON c.id     = ce.id_car
    INNER JOIN table_distances       AS d  ON d.id_car = c.id
    WHERE e.name LIKE 'fire extinguisher'
      AND d.date = ?;
    

    请注意:我在表格
    c
    e
    等中使用了别名,而不是表格的全名。

    d.date=NOW()-间隔1天
    表示昨天[Mahmoud Gamal]谢谢@Oleksandr,如果这是解决方案,请单击此答案旁边的复选框,以便其他人知道它已解决且不再打开。。。。它还帮助其他寻找类似问题的人,以及解决问题的方法。@DRapp谢谢,我是stackoverflow的新手。下次我会知道的@奥列克桑德,没问题。。。每个人都会在某个时间开始
    d.date=NOW()-间隔1天
    表示昨天[Mahmoud Gamal]谢谢@Oleksandr,如果这是解决方案,请单击此答案旁边的复选框,以便其他人知道它已解决且不再打开。。。。它还帮助其他寻找类似问题的人,以及解决问题的方法。@DRapp谢谢,我是stackoverflow的新手。下次我会知道的@奥列克桑德,没问题。。。每个人都会在某个时间启动您应该指定您的db引擎,因为它们不都使用相同的语法来指定“昨天”。此外,使用不带通配符的关键字“like”与使用等号基本相同。您应该指定db引擎,因为它们不都使用相同的语法来指定“昨天”。此外,使用不带通配符的关键字“like”本质上与使用等号相同。