加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL:如何结合按日期排序的3个表

发布时间:2020-12-13 16:35:05 所属栏目:百科 来源:网络整理
导读:我有来自3个不同的不相关表的3个不同的SQL查询(全部使用LIMIT和ORDER BY). 我想根据“日期”字段(显示在所有字段中)合并和排序结果 执行此操作的SQL是什么? 最好的方法是创建一个包含其他三个表中的公共字段的新表,并在公共日期字段上添加一个索引.原始的三
我有来自3个不同的不相关表的3个不同的SQL查询(全部使用LIMIT和ORDER BY).

我想根据“日期”字段(显示在所有字段中)合并和排序结果

执行此操作的SQL是什么?

最好的方法是创建一个包含其他三个表中的公共字段的新表,并在公共日期字段上添加一个索引.原始的三个表应包含链接到公用表的外键.使用此设计,查询变得简单:
SELECT *
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读