两个不同的 SQL 表格行交叉合并,并按日期排序

3
在Postgres中,我有两个几乎没有任何共同点的不同表格,除了它们都有一个创建日期。我想使用该创建日期来在时间轴上显示这两个模型的实例。为此,我想首先以某种方式从这两个表中选择所有的created_at时间戳,并按降序排序,对结果进行分页,然后检测每一行对应的模型以正确显示数据。您觉得这可能吗?

1
你需要提供表结构、一些样本数据和期望的输出。在我看来,你只是想要一个完全外连接:select coalesce(a.creation_date, b.creation_date) from table_a a full outer join table_b b on a.creation_date = b.creation_date order by 1 - user330315
2
另一种方法是使用UNION ALL和一个时间戳的公共列,所有其他列在另一个表中被替换为NULL文字。因此,如果每个表有三个列,您将拥有SELECT * FROM (SELECT a.thetime AS thetime, a.aa AS aa, a.ab AS ab, a.ac AS ac, NULL AS bx, NULL AS by, NULL AS bz FROM a UNION ALL SELECT b.thetimecol, NULL, NULL, NULL, b.x, b.y, b.z) combined ORDER BY combined.thetime。这本质上是一个粗略自制的FULL OUTER JOIN;但是,与FULL OUTER JOIN不同的是,它不会合并时间戳相等的行。 - Craig Ringer
1个回答

7
也许像这样

的东西


select created_at, 'a' as tab_name from table_a 
union all
select created_at, 'b' as tab_name from table_b
order by created_at

只有当 table_atable_b 具有兼容的列时,此方法才能奏效,但这似乎不是本例的情况。 - Craig Ringer
为什么?很明显两个表都有创建日期。 - Dmitry Grekov
额,我糊涂了。我以为你的里面有 table_a.*table_b.*。不知怎么回事。 - Craig Ringer
这太聪明了,正是我在寻找的。千言万谢! - Stephen Corwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接