【问题标题】:SQL JOIN and ORDER two tables by one columnSQL JOIN 和 ORDER 两个表按一列
【发布时间】:2015-01-26 04:12:24
【问题描述】:

我有两个 SQL 表,ActivityNotifications,在客户端我有一个显示两者合并的视图。然而,这个视图需要进行分页(一般用户在这里可能有 100 个对象)并按两个表都有的createdAt 列进行排序。

如何编写一个 SQL 查询来垂直连接两个表,按createdAt 排序,最后限制/偏移?

编辑:

架构:

Activity(id, createdAt, media, userId)

Notifications(id, createdAt, userId, text)

预期结果(createdAt 降序排列):

id | createdAt | media | userId | text
---------------------------------------
1  | ...       | t.jpg | 56     | null
...
10 | ...       | null  | 45     | test

【问题讨论】:

  • 您能否将表架构和预期结果置于问题之中?
  • 您能否也添加您正在使用的数据库服务器,以便我们确保语法正确。
  • PostgreSQL,架构即将推出

标签: sql postgresql join


【解决方案1】:

查看您的示例,您似乎需要合并表:

select id, createdAt, media, userId, Null as text from Activity 
union all
select id, createdAt, Null as media, userId, text from Notifications 
order by createdAt
limit 100

【讨论】:

  • 啊,是的联合。这就是我一直在寻找的
  • 有没有办法在 UNION 中包含所有字段而无需手动输入每个字段?
  • 问题在于,对于 UNION 来说,两个选择中的字段应该在数量和类型上匹配。在您的情况下,一个表中有一些字段没有出现在另一个表中,因此您需要包含 Null。第一个选择可能是选择 Activity.*, Null,但另一个在字段之间有 Null,因此您必须明确将它们全部包含在内。
猜你喜欢
  • 1970-01-01
  • 2018-08-18
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多