2015-02-05 3 views
1

Я хотел бы сделать следующее соединение, которое является некотором UNION ALL в SQL. Как это сделать? Предпочтительно, как это сделать, выбирая все столбцы формы t1 и t2 и объявления соответствующих ключей? Я хотел бы избежать указания имен столбцов, если это возможно.SQL-соединение с использованием UNION ALL с некоторыми общими столбцами и некоторыми внешними

Обновление. Я ставлю некоторые значения в столбцах, чтобы быть более конкретными. Это то, что я хочу:

Регистрация 1

union all

Вероятно, я получил ответы на это:

Регистрация 2

full outer

+0

Какая СУБД вы используете? Похоже, вам нужно полное внешнее соединение, возможно, с фильтрацией. –

+0

Являются ли C4 и C5 в выходной таблице из таблицы 2? – Matt

+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 

Примечания что вам все равно нужно включить буквальное значение null в предложение select, по одному для каждого столбца, которому по умолчанию должно быть значение null.

Demo

+0

Я исправил имена столбцов в изображении вопроса, чтобы он стал более последовательным. –

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 
+0

Я не думаю, что ваш ответ хорош. В результатах я должен иметь таблицу с 7 + 4 строками. В вашем ответе это было бы возможно, только если ключ не совпал. Если все значения C1 и C2 таблицы2 находятся в таблице1, тогда число строк в результатах будет равно 7, как в таблице 1. –

Смежные вопросы