如何限制sql左连接只返回次表的最新记录

tmb3ates  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(329)

我有两张table(文件和状态)。文档字段:

id,      (int)
document,(string)
file,    (string)
creation (date)

状态字段:

id,          (int)
id_document, (int)
status,      (string)
last_update  (date)

id\u文档显然与第一个表中的id匹配。
第一个表保存与文档相关的数据,第二个表保存第一个表的文档处理状态的更新序列。我需要创建一个视图来显示文档列表,如果有的话,只显示它们最后到达的状态。
我编写了此查询,但它生成了正确的联接,但我无法将其限制为最后一个状态:

SELECT
 documents.*, states.status, states.last_update  
FROM
 documents
LEFT JOIN states ON states.id = documents.id
ORDER BY states.last_update

我试着用不同的,不同的方法,但没有运气。。。。

jdgnovmf

jdgnovmf1#

也许这样行得通:

SELECT
 documents.*, updates .status, updates.updated 
FROM
 documents
LEFT JOIN (SELECT id_document, status, MAX(last_update) AS updated 
           FROM states 
           GROUP BY id_document) AS updates 
     ON states.id = documents.id
ORDER BY states.last_update
eanckbw9

eanckbw92#

这应该提供您想要的(可能存在更优雅的解决方案):

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;
42fyovps

42fyovps3#

对每个文档使用max(last\u status)子查询。然后将子查询与您对文档和最后一个状态的查询连接起来。

相关问题