首页 > 解决方案 > 如何限制 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 但没有运气....

标签: mysqlsqlleft-join

解决方案


这应该提供您正在寻找的东西(可能存在更优雅的解决方案):

  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;

推荐阅读