左外连接的SQL where子句

Jas*_*per 6 sql sql-server-2008

我对要创建的视图有疑问.我有两个表在左外连接一起,说tableAtableB,那里tableB是左外连接.

我想只选择表B中状态等于4的那些行,所以我添加WHERE state = 4到我的查询中.现在结果集被修剪了很多,因为没有匹配行的所有行都tableB从结果中删除(因为这些行的状态不是4).我也尝试过WHERE state = 4 OR state IS NULL,也不起作用(因为state技术上不是NULL没有状态时).

所以我需要的是一个WHERE只在实际存在行时进行评估的语句,是否存在这样的事情?

如果不是,我会看到两个选项:join (SELECT * FROM tableB WHERE state = 4)而不是表B,或创建具有相同WHERE语句的视图并将其加入.明智的选择是什么?

顺便说一句,这是SQL Server 2008 R2.

Guf*_*ffa 6

你把条件放在on条款中.例:

select a.this, b.that
from TableA a
left join TableB b on b.id = a.id and b.State = 4
Run Code Online (Sandbox Code Playgroud)


Mik*_*son 5

您可以添加state = 4到连接条件。

select * 
from T1
  left outer join T2
    on T1.T1ID = T2.T1ID and
       T2.state = 4
Run Code Online (Sandbox Code Playgroud)