一个奇怪的外连接问题
现在有A表(主表),结构和数据如下:
serial_noxm
00000000000194013768 时**
00000000000194005220 孟**
B表(从表),结构和数据如下:
serial_noa_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 ;
结果如下:
rownumxmrqserial_no
1孟** 12010100050000000143
2时**
可是我预想的结果却是:
rownumxmrqserial_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条纪录
一个奇怪的外连接有关问题
一个奇怪的外连接问题现在有A表(主表),结构和数据如下:serial_noxm00000000000194013768时**0000000000019
