合并不同表的输出

Merge output of different tables

我有两个表 t1t2。我需要合并他们的输出
t1

 day_hour | col1 
----------+------
 09 AM    |    1
 10 AM    |    3
 11 AM    |    0
 12 PM    |    4

t2

 day_hour | col2 
----------+------
 08 AM    |    11
 11 AM    |    7
 12 PM    |    7
 01 PM    |    6
 02 PM    |    4

输出应该是

 day_hour |   col1  |  col2 
----------+---------+--------
 08 AM    |    NULL |    11
 09 AM    |    1    |    NULL
 10 AM    |    3    |    NULL
 11 AM    |    0    |    7
 12 PM    |    4    |    7
 01 PM    |    NULL |    6
 02 PM    |    NULL |    4

到目前为止,我已经尝试了 FULL OUTER JOIN,但这并没有给我合并的 day_hour
这是我的查询

SELECT t1.day_hour, t1.col1, t2.col2
FROM (SELECT day_hour, col1 FROM t1)
FULL OUTER JOIN 
(SELECT day_hour, col1 FROM t2)
ON t1.day_hour = t2.day_hour;

我正在使用 postgres 11

您可以使用 COALESCE():

SELECT COALESCE(t1.day_hour, t2.day_hour) day_hour, t1.col1, t2.col2
FROM t1
FULL OUTER JOIN t2 ON t1.day_hour = t2.day_hour;

但是在 Postgres 中,USING join 子句可以派上用场:

SELECT day_hour, t1.col1, t2.col2
FROM t1
FULL OUTER JOIN t2 USING(day_hour)

请注意子查询是不必要的 - 我删除了它们。

你可以使用 UNION

    select t.day_hour , t1.col1, t2.col2
    from (
        select day_hour
        from  t1
        union 
        select day_hour
        from  t2

        ) t1
        left join t1 on t1.day_hour = t.day_hour
        left join  t2 on t2.day_hour = t.day_hour 

我想你想从两个表中合并 day_hour。

select
coalesce(t1.day_hour,t2.day_hour),
t1.col1,
t2.col1,
...