连接两个具有不同列的表

时间:2020-08-10 21:58:31

标签: mysql sql

我想在没有FULL OUTER JOIN的情况下合并两个表,因为它在h2 db中不起作用。我必须创建select sql查询:我也对UNION进行了很多尝试,但我认为UNION无法实现。

表1

id     c_id       s_id           p_date
---------------------------------------------
1       1          1              2020-10-10
2       1          1              2020-10-11
3       2          1              2020-10-11
4       2          2              2020-10-12

表2

id     c_id       s_id           s_date
---------------------------------------------
1       1          1              2020-10-15
2       1          2              2020-10-16
3       2          2              2020-10-17
4       2          2              2020-10-17

我期望得到以下结果:

    c_id       s_id      p_date        s_date
    -------------------------------------------------
    1          1        2020-10-10      2020-10-15
    1          1        2020-10-11         -
    1          2            -           2020-10-16
    2          1        2020-10-11         -
    2          2        2020-10-12      2020-10-17
    2          2            -           2020-10-17
    

请帮助获得此结果。

1 个答案:

答案 0 :(得分:1)

您可以像这样使用union all

select t1.c_id, t1.s_id, t1.p_date, t2.s_date
from table1 t1 left join
     table2 t2
     on t1.c_id = t2.c_id and t1.s_id = t2.s_id
union all
select t2.c_id, t2.s_id, t1.p_date, t2.s_date
from table2 t2 left join
     table1 t1
     on t1.c_id = t2.c_id and t1.s_id = t2.s_id
where t1.c_id is null;

第一个子查询获取两个表之间匹配的所有行以及table2table1不匹配的行。

第二个子查询从table2获取在table1中不匹配的其他行。

Here是db <>小提琴。