SQL联接使用UNION ALL,其中一些列是常用的,一些是外部的

时间:2015-02-05 09:03:48

标签: sql join sql-server-2012 union-all

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

更新。我在列中添加了一些更具体的值。这就是我想要的:

加入1

union all

可能我得到了答案:

加入2

full outer

2 个答案:

答案 0 :(得分:2)

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

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

虽然SQL Server支持完全外连接,但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

答案 1 :(得分:1)

使用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