我创建了两个临时表,其中TABLE1包含所有项,而TABLE2仅具有TABLE1的部分列表。我如何找出表1中哪些部分没有表2中的内容,反之亦然?请记住,由于DISTINCT语句,临时表只有一列。
我确实必须使用Joins,但我的想法是,如果我在每个表的各个列上进行JOIN,然后在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
您的where
子句正在撤消left join
。我建议not exists
:
select t1.*
from #table1 t1
where not exists (select 1 from #table2 t2 where t2.parts = t1.parts);