SQL 4表查询

SQL 4表查询,sql,join,task,Sql,Join,Task,有人能帮我处理我写的问题吗?这些问题没有正常工作,也许除了第一个问题 我们有4个带-列的表: table_cars - id | brand | type | license table_equipments - id | name | description table_distances - id_car | date | distance table_cars_equipments - id_car | id_equipment 问题是: 展示所有配备“灭火器”且昨天已经驾驶过的汽车 显

有人能帮我处理我写的问题吗?这些问题没有正常工作,也许除了第一个问题

我们有4个带-列的表:

table_cars - id | brand | type | license
table_equipments - id | name | description
table_distances - id_car | date | distance
table_cars_equipments - id_car | id_equipment
问题是:

  • 展示所有配备“灭火器”且昨天已经驾驶过的汽车
  • 显示没有设备的所有品牌
  • 显示上个月汽车“xxxx”行驶的总距离
  • 显示“某些说明”中汽车每天行驶的平均距离
  • 我的解决方案:

       SELECT 
      table_cars.id,
      table_cars.brand,
    from table_equipments
    INNER JOIN table_cars_equipments  ON table_equipments.id     =  table_car_equipments.id_equipment 
    INNER JOIN table_cars  ON table_cars .id     = table_cars_equipments.id_car
    INNER JOIN table_distances ON table_distances.id_car = table_cars.id
    WHERE table_equpments.name = 'fire extinguisher'
      AND table_date.date = NOW() - INTERVAL 1 DAYS;
    
    SELECT
    table_cars.brand
    from table_cars
    INNER JOIN table_cars_equipments  ON  table_cars_equipments.id_car   =  table_cars .id 
    WHERE table__car_equpments.id_equipment = 0 OR NULL
    
    SELECT table_cars.license,
    sum(distance) as distance,
    from table_distances
    inner join table_cars on table_distances. Id_car = table_cars.id
    where table_distances.date >= NOW() - INTERVAL 30 DAYS
    and table.distances.date <= NOW()
    
    SELECT Avg(distance) as avg_dist
    from( 
    SELECT table_distances.distance,
    Count(*) as dist
    from table_distances
    INNER JOIN table_cars_equipment ON table_dustances.id_car = table_cars_equipments.id_car
    INNER JOIN table_equipments ON  table_cars_equipments.id_equipments = table_equimpents.id
    WHERE table_equipments.distance = "Ilfov"
    GROUPBY table_distances.date) a;
    
    选择
    表2.id,
    表4.1.1品牌汽车,
    从表1到表2
    表\u设备上的内部连接表\u车辆\u设备.id=表\u车辆\u设备.id\u设备
    表车上的内部连接表车。id=表车设备。id\U车
    表_distance.id_car=表_cars.id上的内部联接表_距离
    其中表_equipments.name=‘灭火器’
    表_date.date=NOW()-间隔1天;
    挑选
    表4.1.1汽车品牌
    从桌上汽车
    表车设备上的内部连接表车设备。id表车=表车。id
    其中表\uuu car\u equipments.id\u equipment=0或NULL
    选择表\u cars.license,
    和(距离)作为距离,
    从表_距离
    内部连接表车与表车之间的距离。Id\u car=表\u cars.Id
    其中,table_distance.date>=NOW()-间隔30天
    
    和table.distances.date1。显示所有配备“灭火器”且昨天已行驶的汽车

    SELECT C.* FROM
    TABLE_CARS C
    INNER JOIN TABLE_DISTANCES D ON C.ID = D.ID_CAR 
    INNER JOIN TABLE_CARS_EQUIPMENTS CE ON C.ID = CE.ID_CAR
    INNER JOIN TABLE_EQUIPMENTS E ON CE.ID_EQUIPMENT = E.ID
    WHERE E.DESCRIPTION = 'FIRE EXTINGUISHER'
      AND TRUNC(D.DATE) = TRUNC(SYSDATE - 1);
    
    2.展示所有无设备的品牌

    SELECT DISTINCT BRAND
    FROM TABLE_CARS C
    WHERE NOT EXISTS
    (
      SELECT 'X' FROM TABLE_CARS_EQUIPMENTS CE
      WHERE CE.ID_CAR = C.ID
    );
    
    3.显示上个月汽车“xxxx”行驶的总距离

    SELECT SUM(DISTANCE) 
    FROM TOTAL_DISTANCES D
    INNER JOIN TABLE_CARS C ON D.ID_CAR = C.ID AND C.BRAND = 'XXX'
    WHERE TO_CHAR(D.DATE,'MON') = TO_CHAR(TRUNC(SYSDATE,'MON')-1 , 'MON')
    
    4.显示“某些说明”中汽车每天行驶的平均距离

    此处的日期函数特定于Oracle

    SELECT TRUNC(D.DATE) AS DAY ,AVG(DISTANCE)
    FROM TABLE_CARS C
    INNER JOIN TABLE_DISTANCES D ON C.ID= D.ID_CAR
    WHERE C.BRAND='SOME CAR'
    GROUP BY TRUNC(D.DATE);