我想在没有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
请帮助获得此结果。
答案 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;
第一个子查询获取两个表之间匹配的所有行以及table2
与table1
不匹配的行。
第二个子查询从table2
获取在table1
中不匹配的其他行。
Here是db <>小提琴。