根据两个不同表上的两列对完全连接进行排序

Posted

技术标签:

【中文标题】根据两个不同表上的两列对完全连接进行排序【英文标题】:Sort full join based on two columns on two different tables 【发布时间】:2021-02-16 20:02:25 【问题描述】:

我的 PostgreSQL 数据库中有两个表(表 A 和表 B)。这两个表都有一个 createdAt 列。我想对这两个表进行完全连接,然后根据 A 和 B 表上的 createdAt 值对结果进行排序。下面是我想成为查询结果的示例。

表 A colA joinColumnA createdAtA ----- ------------ --------- a1 1 2014 a2 2 2019 a3 3 2020 表 B colB, joinColumnB createdAtB --- ---------- ----------- b1 2 2013 b2 4 2015 b3 5 2016 结果 colA, joinColumnA createdAtA colB joinColumnB createdAtB ---- ----------- ----------- ---- ----------- --------- -- a3 3 2020 null null null a2 2 2019 b1 2 2013 空空空 b3 5 2016 空空空b2 4 2015 a1 1 2014 null null null

【问题讨论】:

【参考方案1】:

你可以ORDER BY GREATEST(createdAtA, createdAtB):

SELECT *
FROM tableA
FULL JOIN tableB
  ON tableA."joinColumnA" = tableB."joinColumnB"
ORDER BY GREATEST("createdAtA", "createdAtB") DESC;
colA joinColumnA createdAtA colB joinColumnB createdAtB
a3 3 2020
a2 2 2019 b1 2 2013
b3 5 2016
b2 4 2015
a1 1 2014

View on DB Fiddle

【讨论】:

【参考方案2】:

您可以尝试使用最大 createdAT 的联合来连接左连接中的列,并按 ifnull(createdAtA, createdAtB) 顺序连接两个表

    select colA, joinColumnA, createdAtA, null colB, null joinColumnB,  null createdAtB
    from (
        select joinColumn, max(createdAt)
        from (
            select joinColumnA joinColumn, createdAtA createdAt
            from tableA
            select joinColumnB , createdAtB
            from tableB
        ) t1
        group by joinColumn
    ) t2
    left join tableA ON tableA.joinColumnA = t2.joinColumn
    left join tableB ON tableB.joinColumnA = t2.joinColumn
    order by nullif(createdAtA, createdAtB)

【讨论】:

以上是关于根据两个不同表上的两列对完全连接进行排序的主要内容,如果未能解决你的问题,请参考以下文章

连接来自两个不同表的两列

连接表上的 ORDER BY

Hibernate 标准:如何通过连接的两列排序?

Athena 计算两个表上的重复行

如何基于每个数据框中具有不同名称的两列将两个数据框与 dplyr 连接起来? [复制]

全连接层(FC)与全局平均池化层(GAP)