mysql - 将表与最新值连接起来,不起作用

标签 mysql sql

我正在尝试将 delivery 表与 delivery_history 表的最新值连接起来。为此,我编写了以下查询,但不起作用:

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

delivery_history 表

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';

我将 LEFT JOIN 更改为内部联接,因为您需要匹配 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';

关于mysql - 将表与最新值连接起来,不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56648833/

相关文章:

mysql - mysql上的select查询根据条件从单个表中选择值

MySQL LOAD DATA LOCAL INFILE 只导入一行

SQL查询分组参数最大值

MySql 按月添加日期范围

mysql - 如何添加我计算平均评分并从我的专栏中添加此内容

mysql - 替换查询时异常的 mysql 行为

mysql - 如何使用查询获取上个月?

php - 我如何更改此脚本,以便当它发现用户存在于 MySQL 数据库中时它会更新并且不返回错误消息?

mysql - 刷新 SWI-Prolog 中的数据库缓存

php - 将 PHP 查询设置为嵌套数组