我正在尝试将 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/