我想进行以下连接,这在SQL中是某种UNION ALL
。怎么做?最好如何通过从t1和t2中选择所有列并声明匹配键来实现?如果可能的话,我想避免指定列名。
更新。我在列中添加了一些更具体的值。这就是我想要的:
加入1
可能我得到了答案:
加入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。
答案 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