postgresql - sql排序 LEFT OUTER Join 使用带回退的右表

  显示原文与译文双语对照的内容

我有两个表格:

  • Table1 - Id,created_at
  • 0,Id,table1_id,created_at

我想要包含一个 Join 行,用一个来获取最新的记录( 如果有的话,可能没有任何文件列表记录),并使用created_at上的命令。 如果没有of记录,我希望能够使用表中的created_at进行记录排序。

例如:


Table 1 (id, created_at) 


1, 100 


2, 200 


3, 300 


4, 400 



Table 2 (id, table1_id, created_at) 


1, 1, 500 


2, 1, 450 


3, 2, 350 



查询将给出结果( t1.id 。t1.created_at 。t2.id, t2.created_at )


1, 100, 1, 500 


4, 400, --, -- 


2, 200, 2, 350 


3, 300, --, -- 



我正在使用 PostgreSQL 。最好的查询/方法是什么?

时间: 原作者:


select t1.id, t1.created_at, t2.id, t2.created_at


from


 table1 t1 


 left outer join (


 select id, max(created_at) created_at


 from table2


 group by id


 ) t2 on t1.id = t2.id


order by coalesce(f2.created_at, f1.created_at) desc;



原作者:

假设我提出了一个看起来可以工作的查询:


SELECT * FROM table1 AS t1 


LEFT OUTER JOIN table2 AS t2 ON (


 t2.t1_id = t1.id


 AND 


 t2.id = (SELECT tt2.id FROM table2 tt2 WHERE tt2.t1_id = t1.id ORDER BY created_at DESC LIMIT 1)


) ORDER BY COALESCE(f2.created_at, f1.created_at) DESC;



不确定这是最好的还是最有效的方式来做到这一点,所以我仍然开放建议。

原作者:
...