我有两张桌子:
我希望将所有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。最好的查询/方法是什么?
答案 0 :(得分: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;
答案 1 :(得分: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;
不确定这是否是最好或最有效的方式,所以我仍然愿意接受建议。