Mysql 具有最新值的联接表无效

Mysql 具有最新值的联接表无效,mysql,sql,Mysql,Sql,我正在尝试使用delivery\u历史记录表的最新值加入delivery表。为此,我编写了以下查询,但不起作用: SELECT d.* FROM delivery as d LEFT JOIN (SELECT * FROM delivery_history WHERE delivery_history.delivery_id = d.id ORDER BY id DESC LIMIT 1) h ON d.id = h.delivery_id

我正在尝试使用
delivery\u历史记录
表的最新值加入
delivery
表。为此,我编写了以下查询,但不起作用:

SELECT d.*
FROM delivery as d
LEFT JOIN 
     (SELECT * 
      FROM delivery_history 
      WHERE delivery_history.delivery_id = d.id 
      ORDER BY id DESC LIMIT 1) h ON d.id = h.delivery_id 
WHERE h.delivery_status = 'Pending' GROUP BY d.id
交付表

id | name  
1  | John
id | delivery_id | delivery_status 
1  | 1           | Pending
2  | 1           | Invoiced
交付历史记录表

id | name  
1  | John
id | delivery_id | delivery_status 
1  | 1           | Pending
2  | 1           | Invoiced
预期结果

id | name | delivery_status 
1  | John | Invoiced
我的查询有什么问题?

使用

使用

使用如下逻辑:

SELECT d.*
FROM delivery d JOIN
     delivery_history dh
     ON dh.delivery_id = d.id JOIN
     (SELECT dh.delivery_id, MAX(dh.id) as max_id
      FROM delivery_history dh
      GROUP BY dh.delivery_id
     ) ddh
     ON ddh.delivery_id = dh.delivery_id AND ddh.max_id = dh.id
WHERE dh.delivery_status = 'Pending';
我将
左连接
更改为内部连接,因为您需要匹配
WHERE
条件

编辑:

如果只需要最新状态,则使用相关子查询可能更有效:

select d.*,
       (select dh.status
        from delivery_history dh
        where dh.delivery_id = d.id
        order by dh.id desc
        limit 1
       ) as latest_status
from delivery d
having latest_status = 'Pending';
使用如下逻辑:

SELECT d.*
FROM delivery d JOIN
     delivery_history dh
     ON dh.delivery_id = d.id JOIN
     (SELECT dh.delivery_id, MAX(dh.id) as max_id
      FROM delivery_history dh
      GROUP BY dh.delivery_id
     ) ddh
     ON ddh.delivery_id = dh.delivery_id AND ddh.max_id = dh.id
WHERE dh.delivery_status = 'Pending';
我将
左连接
更改为内部连接,因为您需要匹配
WHERE
条件

编辑:

如果只需要最新状态,则使用相关子查询可能更有效:

select d.*,
       (select dh.status
        from delivery_history dh
        where dh.delivery_id = d.id
        order by dh.id desc
        limit 1
       ) as latest_status
from delivery d
having latest_status = 'Pending';

最新消息是什么<代码>按描述的订单限制1??id?预期结果是什么?@Roy抱歉,这是一个键入错误,当我在网站上键入查询时,最新的是什么<代码>按描述的订单限制1??id?预期结果是什么?@Roy抱歉,这是一个键入错误,当我从架构在网站上键入查询时,可以假定传递可能会挂起不止一次,这没有考虑到这一点。从架构可以假定传递可能会挂起不止一次,这没有考虑到这一点