2011-10-05 121 views
1

a领域:sql连接,左连接。记录未显示,如果有标准的右表

id_a 

b领域:

id_b 
id_b2 
filed_b 
filed_b2 

c领域:

id_c 
filed_c 

a数据:

id_a 
---- 
1 
2 

b数据:

id_b id_b2 filed_b 
---- ----- ------- 
1  1  1 
2  2  100 

c数据:

id_c filed_c 
---- --------- 
1  adfa11111 
2  dfdf22222 

加入

a join b on id_a=id_b 
b join c on id_b2=id_c 

我们的目标是让所有的表a数据和屁股ociated filed_c数据。 标准是:if filed_b=100, list filed_c. otherwise leave filed_c null.

问题:使用左连接,如果右表没有标准,那很好。但是,一旦右表有一个标准,右表中不存在的记录就不会显示出来。

回答

2

获取where条件与左外连接一起工作的技巧是将条件放入join子句中。如果您在where子句中针对b.filed_b进行检查,则排除值为null的行,当表b中的匹配项不匹配时。

你的情况是这样的。

select * 
from a 
    left outer join b 
    on a.id_a = b.id_b and 
     b.filed_b = 100 
    left outer join c 
    on b.id_b2 = c.id_c