Объединить две таблицы в SQL Server 2008 - PullRequest
2 голосов
/ 06 октября 2011

Мне нужно спросить что-нибудь, есть ли способ объединить две таблицы с разным количеством столбцов, например:

Select a,b,c, from x

 union 

Select d, e from y

Ответы [ 4 ]

3 голосов
/ 06 октября 2011

вам нужно сделать что-то вроде этого

Select a,b,c from x

 union all  -- ALL doesn't filter dups and is faster

Select d, e, '' as f from y

Я использовал '', но вы можете использовать NULL или 0, NULL будет совместим со всеми типами данных, '' не будет

Я также использовал UNION ALL, а не UNION, так как он будет работать лучше, потому что ему не нужно выполнять операцию сортировки, чтобы избавиться от ошибок

псевдоним f здесь не нужен, так как верхний запрос определяет имя столбцов в наборе результатов

1 голос
/ 06 октября 2011

Обратите внимание, что

select a, b, c from x
union
select d, e, '' as f from y;

и

select d, e, '' as f from y
union
select a, b, c from x;

будут давать разные результаты, т.е. будут использоваться имена атрибутов из первой появившейся таблицы.

Возможно, лучше быть недвусмысленным, явно переименовав столбцы во второй таблице, например

select a, b, c from x
union
select d AS a, e AS b, '' as c from y;
0 голосов
/ 14 сентября 2012
first table 
id
name
second table 
name 
seatno

если вы хотите объединиться по имени и в обеих таблицах есть несколько повторяющихся имен, используйте ROW_NUMBER в запросе на присоединение!

0 голосов
/ 06 октября 2011
select col1, col2, col3, col4
from mytable1
union all
select col5, col6, null as col7, '' as col8
from mytable2
...