SQL: проблема JOIN с использованием временных таблиц и одного столбца - PullRequest
0 голосов
/ 12 марта 2020

Я создал две временные таблицы, в которых TABLE1 содержит все элементы, а TABLE2 имеет только частичный список TABLE1. Как я могу узнать, какие части ТАБЛИЦА 1 имеет то, что ТАБЛИЦА 2 не имеет, или наоборот? Помните, что временная таблица имеет только один столбец из-за оператора DISTINCT.

Мне действительно нужно использовать соединения, но я думаю, что если я СОЕДИНЯЮСЬ в отдельных столбцах каждой таблицы, а затем в состоянии предложения Where, например, столбец 1 не равен столбцу 2, это противоречит.


IF EXISTS   (
            SELECT *
            FROM tempdb.dbo.sysobjects
            WHERE id = Object_id(N'tempdb..#TABLE1')
            )
        BEGIN
            DROP TABLE #TABLE1
        END

IF EXISTS   (
            SELECT *
            FROM tempdb.dbo.sysobjects
            WHERE id = Object_id(N'tempdb..#TABLE2')
            )
        BEGIN
            DROP TABLE #TABLE2
        END
------------------------------------------------
select distinct 1.parts as #TABLE1 from List1 1  --- MAIN LIST

select distinct 2.parts as #TABLE2 from List2 2  --- ADDITIONAL LIST

select *
from #TABLE2 left join
     #TABLE1
     on 2.parts = 1.parts
where 2.parts <> 1.parts 

1 Ответ

1 голос
/ 12 марта 2020

Ваше предложение where отменяет left join. Я бы порекомендовал not exists:

select t1.*
from #table1 t1
where not exists (select 1 from #table2 t2 where t2.parts = t1.parts);
...