一个奇怪的外连接问题
现在有A表(主表),结构和数据如下:
serial_no xm
00000000000194013768 时**
00000000000194005220 孟**
B表(从表),结构和数据如下:
serial_no a_serial_no rq
12010100050000000143 00000000000194005220
12010100050000000161 00000000000194005220 20070411
12010100050000000145 00000000000194013768 20070410
用以下SQL文检索:
select a.xm,
b.rq,
b.serial_no
from a,b
where a.serial_no = b.a_serial_no(+)
and b.rq(+) is null ;
结果如下:
rownum xm rq serial_no
1 孟** 12010100050000000143
2 时**
可是我预想的结果却是:
rownum xm rq serial_no
1 孟** 12010100050000000143
2 时**
3 孟**
请问为什么我预想中的rownum:3没有出来?
如果条件不符合的话,那为什么rownum:2却能出来,
他们应该是一样的呀?
为什么rownum:1出来后,我预想的rownum:3就被过滤掉了?
------解决方案--------------------select a.xm,
b.rq,
b.serial_no
from a,b
where a.serial_no = b.a_serial_no(+)
and b.rq(+) is null ;
等价于:
select a.xm, b.rq, b.serial_no
from a left join b on a.serial_no = b.a_serial_no and b.rq is null
也就是说a表左连接b表,看b表是否存在a.serial_no = b.a_serial_no and b.rq is null的纪录,如果存在,则显示相关的b表中的信息;否则,对a表中的纪录在b表中找不到纪录相匹配的话,则在查询出的结果集的对应字段中显示null,所以仅仅返回两条纪录,而不是楼主希望的3条纪录