OUTER UNION
By default UNION requires both RowSets to have matching schemas. OUTER UNION allows the schemas to be different. If one RowSet is missing a column that the other has, that row will be included in the result with a default value for the missing columns.
NOTE: OUTER UNION only supports ALL. It does not support DISTINCT.
The following script will union the two rowsets @left and @right with the partially overlapping schema on columns A and K while filling in null into the "missing cells" of column C and 0 as the default value for type int for column B.
@left =
SELECT *
FROM (VALUES ( 1, "x", (int?) 50 ),
( 1, "y", (int?) 60 )
) AS L(K, A, C);
@right =
SELECT *
FROM (VALUES ( 5, "x", 1 ),
( 6, "x", 2 ),
(10, "y", 3 )
) AS R(B, A, K);
@res =
SELECT * FROM @left
OUTER UNION BY NAME ON (*)
SELECT * FROM @right;
The result is:
| K | A | C | B |
|---|---|---|---|
| 1 | "x" | 50 | 0 |
| 1 | "x" | 5 | |
| 1 | "y" | 60 | 0 |
| 2 | "x" | 6 | |
| 3 | "y" | 10 |