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抱歉,这是一个键入错误,当我从架构在网站上键入查询时,可以假定传递可能会挂起不止一次,这没有考虑到这一点。从架构可以假定传递可能会挂起不止一次,这没有考虑到这一点