首页 > 解决方案 > 仅对 MYSQL 中最后返回的行执行 JOIN

问题描述

我有table t1哪些存储所有请求。我有table t2哪些存储与表 t1 中提出的请求相关的审计。为了获得每个请求的最新审核,我需要在两个表上执行连接。

我可以使用以下查询执行 JOIN:

SELECT 
    t2.id, t1.name, 
    t2.Msg
FROM 
    requests t1
    LEFT JOIN audits t2 ON t1.AuditId = t2.AuditId
ORDER BY t2.id DESC;

上面的查询返回结果如下:

id          Name            Msg      
56895415    ABC05           Message5
56895414    ABC05           Message4
56895413    ABC05           Message3
56895303    ABC04           Message5
56895302    ABC04           Message4
56895301    ABC04           Message3

我想修改查询,以便only the last row(with highest id value)为每个显示。t1.name 换句话说,我的输出应如下所示:

id          Name            Msg      
56895415    ABC05           Message5
56895303    ABC04           Message5

标签: mysqljoininner-joingreatest-n-per-groupouter-join

解决方案


您可以像下面这样重写查询

SELECT 
    t2.id, t1.name, 
    t2.Msg
FROM 
    requests t1
    LEFT JOIN (SELECT id, Msg FROM audits ORDER BY id DESC LIMIT 1) t2 ON t1.AuditId = t2.AuditId
ORDER BY t2.id DESC;

推荐阅读