SQL 使用 UNION ALL 加入一些公共列和一些外部列

SQL join using UNION ALL with some columns common and some outer

我想进行以下连接,这是 SQL 中的某种 UNION ALL。怎么做?最好如何通过选择 所有列 形成 t1 和 t2 并声明匹配键来做到这一点?如果可能,我想避免指定列名。

Update. 为了更具体,我在列中放置了一些值。这就是我想要的:

加入 1

可能我得到了答案:

加入 2

使用 FULL OUTER JOIN

假设输出示例中的 C4 和 C5 来自 t2...

SELECT t1.C1, t1.C2, t1.C3, t2.C3, t2.C4
FROM t1
FULL OUTER JOIN t2 ON t1.C4 = t2.C1 AND t1.C5 = t2.C2

使用完全外部联接,如下所示:

select *
from table1 t1 
full outer join table2 t2
on t1.c4 = t2.c1 and t1.c5 = t2.c2

虽然 SQL 服务器支持完全外部联接,但 MySQL 不支持。在那种情况下,可以按如下方式重写此查询:

select *
from table1 t1 
left outer join table2 t2
on t1.c4 = t2.c1 and t1.c5 = t2.c2
union
select *
from table1 t1 
right outer join table2 t2
on t1.c4 = t2.c1 and t1.c5 = t2.c2

根据您的更新 要求,可以使用上面指定的此连接形式,稍加修改如下:

select null,null,null,t.* from table1 s
right outer join table2  t on s.c4 = t.c1  and s.c5 = t.c2
union
select s.*,null,null from table1 s
left outer join table2  t on s.c4 = t.c1  and s.c5 = t.c2

请注意,您仍然需要在 select 子句中包含字面值 null,每个需要默认为 null 的列一次。

Demo