且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MySQL:引用子查询列

更新时间:2022-04-09 22:57:15

我花了很多时间研究这个问题,这个问题是mysql的一个基本问题,即如果内部查询位于查询的FROM部分,则不能在内部查询中引用外部查询,即使内部查询位于SELECT部分,也可以引用外部查询。

至于从交付日期历史记录中获取第一条和最后一条记录,我发现了这个查询,它能以可接受的性能生成正确的结果。

SELECT odr.order_id,
    first_change.projected_date AS initial_projected_dispatch_date,
    last_change.projected_date AS final_projected_dispatch_date
FROM order AS odr
LEFT JOIN (
    SELECT 
        order_id, 
        MIN(order_delivery_projection_id) AS first_id, 
        MAX(order_delivery_projection_id) AS last_id
    FROM order_delivery_projections
    GROUP BY order_id
) AS change_record_finder ON change_record_finder.order_id = odr.order_id
LEFT JOIN order_delivery_projections AS first_change ON first_change.order_delivery_projection_id = change_record_finder.first_id
LEFT JOIN order_delivery_projections AS last_change ON last_change.order_delivery_projection_id = change_record_finder.last_id
WHERE -- where clauses go here
Matt的解决方案本来可以在其他SQL版本中工作,但是MySQL缺乏所需的功能,无法让他的正确答案工作。