2

我有两张桌子:

  • 表 1 - ID,created_at
  • 表 2,Id,table1_id,created_at

我想将所有 Table1 行包含在一个连接中,该连接获取最新的 Table2 记录(如果有,可能没有任何 table2 记录),并使用 Table2 上的 created_at 对结果进行排序。如果没有 Table2 记录,我希望能够将 Table1 中的 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。完成此任务的最佳查询/方法是什么?

4

2 回答 2

3
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;
于 2012-10-30T15:33:54.780 回答
1

认为我想出了一个似乎有效的查询:

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;

不确定这是否是最好或最有效的方法,所以我仍然愿意接受建议。

于 2012-10-30T15:24:01.180 回答