您还将看到用于进一步过滤记录的 AND 子句。这在处理外连接时非常重要,因为将这些过滤操作添加到 where 子句会将连接从左连接变为内连接(除非它类似于 where t.idfield 为空)。
下面我将展示它是如何工作的,以及为什么将过滤子句放在正确的位置很重要。
创建表 #test ( test1id int, test varchar (10)) 创建表 #test2 ( test2id int, test1id int, test2 varchar (10))
insert into #test (test1id, test)
select 1, 'Judy'
union all
select 2, 'Sam'
union all
select 3, 'Nathan'
insert into #test2 (test2id, test1id, test2)
select 1,1,'hello'
union all
select 2,1,'goodbye'
union all
select 3,2,'hello'
select * from #test t
left join #test2 t2 on t.test1id = t2.test1id
where test2 = 'goodbye'
--result set
--test1id test test2id test1id test2
--1 Judy 2 1 goodbye
select * from #test t
left join #test2 t2 on t.test1id = t2.test1id
and test2 = 'goodbye'
--result set
--test1id test test2id test1id test2
--1 Judy 2 1 goodbye
--2 Sam NULL NULL NULL
--3 Nathan NULL NULL NULL
您可以使用 where some field is null (假设您选择一个永远不会为空的字段)来获取第一个表中的记录,而不是第二个表中的记录,如下所示:
select * from #test t
left join #test2 t2 on t.test1id = t2.test1id
where test2id is null
--result set
--test1id test test2id test1id test2
--3 Nathan NULL NULL NULL