最好的方法是创建一个包含其他三个表中的公共字段的新表,并在公共日期字段上添加一个索引.原始的三个表应包含链接到公用表的外键.使用此设计,查询变得简单:
原文链接:https://www.f2er.com/postgresql/192856.htmlSELECT * FROM common_table ORDER BY "date" DESC LIMIT 100
如果还需要来自更具体表的数据,则可以使用LEFT JOIN来在同一查询中选择该数据.
如果您无法更改设计并且性能不是问题,那么您可以使用UNION ALL在排序之前组合来自所有三个表的结果:
SELECT * FROM table1 UNION ALL SELECT * FROM table2 UNION ALL SELECT * FROM table3 ORDER BY "date" DESC LIMIT 100
请注意,只有所有表具有相同的结构时,上述操作才有效.如果您在一个表中出现但在其他表中没有的字段,那么您应该从SELECT中省略它们,否则在其他表中为该列返回NULL.例如,如果:
> table1包含列a,b,c和日期.
> table2有列b,c和日期.
> table3包含列a,c和日期.
然后用这个:
SELECT a,c,"date" FROM table1 UNION ALL SELECT NULL AS a,"date" FROM table2 UNION ALL SELECT a,NULL as b,"date" FROM table3 ORDER BY "date" DESC LIMIT 100