mysql - 如何限制 SQL Left JOIN 只返回从表的最新记录
问题描述
我有两个表(文档和状态)。 文档字段:
id, (int)
document,(string)
file, (string)
creation (date)
状态字段:
id, (int)
id_document, (int)
status, (string)
last_update (date)
id_document显然匹配第一个表中的id。
第一个表保存与文档相关的数据,第二个表保存第一个表的文档处理的一系列更新状态。我需要创建一个视图来显示文档列表,其中只有它们最后达到的状态(如果有)。
我写了这个查询,但是做出了正确的连接,但我无法将其限制为最后一个状态:
SELECT
documents.*, states.status, states.last_update
FROM
documents
LEFT JOIN states ON states.id = documents.id
ORDER BY states.last_update
我尝试了 DISTINCT,DISTINCTROW 但没有运气....
解决方案
这应该提供您正在寻找的东西(可能存在更优雅的解决方案):
select d.*,
s.status,
s.last_update
from documents d,
states s
where s.id = d.id
and s.last_update = ( select last_update
from states
where id = d.id
order by last_update desc
limit 0,1 )
or s.last_update is NULL;
推荐阅读
- angular - Angular Routing - 嵌套路由器出口(一个主要 + 两个命名出口) - 导航到第三个路由器出口时出错
- html - 规模大纲和活动卡片上的过滤器
- python - TypeError: '_io.TextIOWrapper' 对象在读取 JSON 时不可下标
- sql - 如何在不计算第二个表中的双打的情况下建立连接?
- memory-management - 操作系统参与堆栈操作
- node.js - 多个谷歌云功能:如何管理内部库?
- javascript - 将画布导出为 SVG 文件
- kotlin - kotlinx de/serialization 密封类/枚举
- python - Scikit-Learn 的感知器训练准确率低于 100%,尽管数据是线性可分的
- flutter - 从键盘输入输入字段时,模拟器不断冻结