这是使用SQL Server 2012。
我想使用内连接,并使用3个表左连接。
计划是:
我想找到表L中不存在的集合,表示之前没有处理过。
我写道:
select top 100
s.*
from
S
inner join
V on s.pid = v.pid
left join
L on L.pid = v.pid and L.pro = v.pid
where
s.reg = 'u'
and v.pro = 'p'
and v.categoryid = 8
and L.pid is null
and L.pro = 'p'
这不会返回任何内容......
请帮忙
答案 0 :(得分:0)
如果你left join
一个表,然后将它的列过滤为等于非空值,它实际上会过滤掉该表上的null
值,包括未进行连接的情况。
您需要处理空值以防止这种情况发生。例如,你会改变
and L.pro='p'
到
and (L.pro IS NULL OR L.pro='p')
或更简单
and ISNULL(L.pro, 'p') = 'p'