Поиск easist/most масштабируемого способа сделать набор "различие" в SQL Server видит ниже.
Если Вы не можете сказать из изображения, что я ищу все, что не находится в пересечении.
Я видел один способ сделать это:
select * from (
(select 'test1' as a, 1 as b)
union all
(select 'test2' as a , 2 as b union all select 'test1' as a , 1 as b )
)un group by a,b having count(1)=1
Но я боюсь того, что произошло бы, если бы я использовал два больших набора (я не буду запрашивать от выбора '' постоянные операторы, мои запросы будут вытягивать от реальных таблиц.)
Править:
Возможное решение...
drop table #temp_a;
drop table #temp_b;
go
select * into #temp_a from (
select 1 as num, 'String' as two, 'int'as three, 'purple' as four union all
select 2 as num, 'dog' as two, 'int'as three, 'purple' as four union all
select 3 as num, 'dog' as two, 'int'as three, 'cat' as four ) a
select * into #temp_b from (
select 1 as num, 'String' as two, 'decimal'as three, 'purple' as four union all
select 2 as num, 'dog' as two, 'int'as three, 'purple' as four union all
select 3 as num, 'dog' as two, 'int'as three, 'dog' as four ) b
SELECT IsNull(a.num, b.num) A,IsNull(a.two, b.two) B, IsNull(a.three, b.three) C,
IsNull(a.four, b.four) D
FROM #temp_a a
FULL OUTER JOIN #temp_b b ON (a.num=b.num AND a.two=b.two and a.three=b.three and a.four=b.four)
WHERE (a.num is null or b.num is null )
РЕЗУЛЬТАТЫ:
1 Строковый фиолетовый интервал
3 кошки интервал собаки
1 Строковый фиолетовый декабрь
3 собаки интервала собаки
Как насчет чего-то вроде этого?
SELECT A, B FROM Table1 EXCEPT SELECT A,B FROM Table2
UNION
SELECT A, B FROM Table2 EXCEPT SELECT A,B FROM Table1
Вот пример с методом FULL OUTER JOIN ( предполагая, что A не допускает значения NULL в обеих таблицах)
SELECT IsNull(Table1.A, Table2.A) a,IsNull(Table1.B, Table2.B) B
FROM Table1
FULL OUTER JOIN Table2 ON (Table1.A=Table2.A AND Table1.B=Table2.B)
WHERE Table1.A is null or Table2.A is null
То, что вам нужно, называется полным внешним соединением, которое SQL Server поддерживает .