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 的列一次。
我想进行以下连接,这是 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 的列一次。