Обычно вам нужно иметь одинаковое количество столбцов, когда вы используете операторы на основе множеств, поэтому Кангканский ответ правильный.
SAS SQL имеет специальный оператор для обработки этого сценария:
SAS (R) 9.3 Руководство пользователя процедуры SQL
КОРРЕСПОНДИНГ (CORR) Ключевое слово
Ключевое слово CORRESPONDING используется только в том случае, если указан оператор set. CORR заставляет PROC SQL сопоставлять столбцы в табличных выражениях по имени, а не по порядковому положению. Столбцы, которые не совпадают по имени, исключаются из таблицы результатов, за исключением оператора OUTER UNION.
SELECT * FROM tabA
OUTER UNION CORR
SELECT * FROM tabB;
Для:
+---+---+
| a | b |
+---+---+
| 1 | X |
| 2 | Y |
+---+---+
OUTER UNION CORR
+---+---+
| b | d |
+---+---+
| U | 1 |
+---+---+
<=>
+----+----+---+
| a | b | d |
+----+----+---+
| 1 | X | |
| 2 | Y | |
| | U | 1 |
+----+----+---+
U-SQL поддерживает аналогичную концепцию:
Внешний союз по имени (*)
OUTER
требуется предложение BY NAME и список ON. В отличие от других выражений набора, выходная схема OUTER UNION включает в себя как совпадающие столбцы, так и несовпадающие столбцы с обеих сторон. Это создает ситуацию, когда в каждой строке, приходящей с одной из сторон, есть «пропущенные столбцы», которые присутствуют только на другой стороне. Для таких столбцов значения по умолчанию предоставляются для «отсутствующих ячеек». Значения по умолчанию равны нулю для типов, допускающих значение NULL, и значения по умолчанию .Net для типов, не допускающих значения NULL (например, 0 для типа int).
ПО ИМЕНЕ
требуется при использовании с OUTER. Предложение указывает, что объединение сопоставляет значения не на основе позиции, а по имени столбцов. Если предложение BY NAME не указано, сопоставление выполняется позиционно.
Если предложение ON содержит символ «*» (он может быть указан как последний или единственный элемент списка), тогда допускаются дополнительные совпадения имен, помимо тех, которые указаны в предложении ON, а столбцы результата включают все соответствующие столбцы в порядке их присутствия в левом аргументе.
и код:
@result =
SELECT * FROM @left
OUTER UNION BY NAME ON (*)
SELECT * FROM @right;
EDIT:
Концепция внешнего объединения поддерживается KQL :
вид:
inner - результат имеет подмножество столбцов, общих для всех входных таблиц.
external - У результата есть все столбцы, которые встречаются в любом из входных данных. Ячейки, которые не были определены входной строкой, устанавливаются в ноль.
Пример:
let t1 = datatable(col1:long, col2:string)
[1, "a",
2, "b",
3, "c"];
let t2 = datatable(col3:long)
[1,3];
t1 | union kind=outer t2;
Выход:
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| 1 | a | |
| 2 | b | |
| 3 | c | |
| | | 1 |
| | | 3 |
+------+------+------+
демо