Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Пересечение таблиц  [new]
Nakeshi
Member

Откуда:
Сообщений: 81
Есть 2 таблицы (table1 и table2) со следующими данными по 3м полям:

table1

1 'XXXX1' 11
1 'XXXX2' 22
2 'XXXX3' 33

table2

1 'XXXX4' 44
1 'XXXX5' 55
3 'XXXX6' 66

Как можно получить выборку вида? :

1 'XXXX1' 11 'XXXX4' 44
1 'XXXX2' 22 'XXXX4' 55
2 'XXXX3' 33 null null
3 null null 'XXXX6' 66
12 мар 13, 17:56    [14041850]     Ответить | Цитировать Сообщить модератору
 Re: Пересечение таблиц  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
full join
12 мар 13, 17:58    [14041864]     Ответить | Цитировать Сообщить модератору
 Re: Пересечение таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Паганель
full join
Более того, предварительно пронумеровать,
а потом - FULL JOIN по этим номерам
12 мар 13, 20:22    [14042258]     Ответить | Цитировать Сообщить модератору
 Re: Пересечение таблиц  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
declare @t1 table (a1 int, a2 varchar(20), a3 int)
declare @t2 table (a1 int, a2 varchar(20), a3 int)
insert @t1 ( a1, a2, a3 )
          select 1, 'XXXX1', 11
union all select 1, 'XXXX2', 22
union all select 2, 'XXXX3', 33
insert @t2 ( a1, a2, a3 )
          select 1, 'XXXX4', 44
union all select 1, 'XXXX5', 55
union all select 3, 'XXXX6', 66

;with 
  t1 as(select *, ROW_NUMBER() OVER (PARTITION BY a1 ORDER BY a3) RowId FROM @t1),
  t2 as(select *, ROW_NUMBER() OVER (PARTITION BY a1 ORDER BY a3) RowId FROM @t2)
select ISNULL(t1.a1, t2.a1) as a1, t1.a2, t1.a3, t2.a2, t2.a3
from t1 full outer join t2 on t1.a1 = t2.a1 and t1.RowId = t2.RowId
12 мар 13, 20:27    [14042269]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить