今天早上遇到一个问题如下:
表T1,表T2
select T1.branch_name
from T1
left join T2
on T1.branch_id = T2.branch_id
查询结果:北京分公司,上海分公司,总公司
select T1.branch_name
from T1
left join T2
on T1.branch_id = T2.branch_id
and T1.class_id = '02'
查询结果:北京分公司,上海分公司,总公司
此时条件 T1.class_id = '02'并不能限制T1值的显示
将
and T1.class_id = '02'的and改为where后如下:
select T1.branch_name
from T1
left join T2
on T1.branch_id = T2.branch_id
where T1.class_id = '02'
查询结果:北京分公司,上海分公司
总结:左连接后的条件限制应该写在where后
select T1.branch_name
from T1
left join T2
onT1.branch_id = T2.branch_id
whereT1.class_id = '02'
and T2.stat_date=''
查询结果:空
总结:T1左连接T2(T2为空值),查询结果为空
遗留问题:
若用T1左连接T2(T2为空),想让T1全部显示,T2没值则显示空,如何实现?
左连接标准写法:
select T1.branch_name
from T1
left joinT2
onT1.branch_id = T2.branch_id
oracle 写法:
select T1.branch_name
from T1,T2
where T1.branch_id = T2.branch_id(+)