Ищите облегченный/наиболее масштабируемый способ выполнения «разницы» в SQL Server, см. Ниже. Разница 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
Но я боюсь, что произойдет, если я использовал два больших наборы (я не буду запрашивать от выбора «» постоянных заявлений, мои запросы будут вытягивать от реальных таблиц)
EDIT:.
Возможное решение ...
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 собаки ИНТ собака
Что делает IsNull часть достичь? Это просто средство «показать» то, чего не хватает? – Nix
Для строк, у которых есть только запись в одной из таблиц (те, которые вы хотите), будет нуль в одной таблице или другой. Например, либо Table1.A будет null, либо Table2.A будет нулевой для каждой строки. Isnull захватывает значение с той стороны, которая имеет значение. – JohnFx