首页 > 解决方案 > mysq:在 FROM 和 WHERE 子句中使用相同的子查询而不重复?

问题描述

我需要选择车间中所有最长的汽车的数据。因此,如果最多天数是 16 天并且有多辆汽车有 16 天,我需要所有这些汽车。


我的模型是这样的

汽车:id_car、mat_car、mod_car、颜色、类型

期间:id_per、date_ini、date_fin

Relacion4 : id_car, id_per


此方法有效,但有没有办法在 FOR 和 WHERE 子句中不重复相同的子查询?

select * from (
    select Car.mat_car, mod_car, color, type, date_ini, date_fin, datediff(date_fin, date_ini) daysInWorkshop from Car
    inner join Relacion4 on Car.mat_car = Relacion4.mat_car
    inner join Period on Relacion4.id_per = Periodo.id_per
) as CarWithDurr
where daysInWorkshop = (
    select max(daysInWorkshop) from (
        select datediff(date_fin, date_ini) daysInWorkshop from Car
        inner join Relacion4 on Car.mat_car = Relacion4.mat_car
        inner join Period on Relacion4.id_per = Period.id_per
    ) as CarWithDurr
);

标签: mysqldatabase

解决方案


我觉得你可以瘦一点。

    select Car.mat_car, mod_car, color, type, 
          date_ini, date_fin, datediff(date_fin, date_ini) daysInWorkshop 
    from Car
    inner join Relacion4 on Car.mat_car = Relacion4.mat_car
    inner join Period on Relacion4.id_per = Periodo.id_per
    where datediff(date_fin, date_ini) = 
    (
    select max(datediff(date_fin, date_ini)) 
    from Period
    )
    ;

如果这不能如您所愿,请将示例数据和预期输出作为文本添加到问题中。

顺便说一句,您在哪里得到 Relacion4.mat_car 它不在您发布的表格中!AND Periodo 拼写错误。


推荐阅读