请教一个SQL语句问题

[复制链接]
查看11 | 回复7 | 2013-8-22 09:58:03 | 显示全部楼层 |阅读模式
请问我如下写的一条SQL语句为什么查出来的结果不全啊
select a.columnA, b.columnA, c.columnA
from a, b, c
where a.columnB (+) = b.columnB
and a.columnC (+) = c.columnB
其中b和c是同一个表
a的columnB和columnC都有可能为空
结果是的a的columnB为空时查不出来
这是什么原因呢?
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
b和c是一个表,a表的columnb=b.columnb,cloumnc=c.columnb.那么a表的b,c两个字段的值是一样的么?能说得清楚点么。
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
最初由 itsmytime 发布
[B]请问我如下写的一条SQL语句为什么查出来的结果不全啊
select a.columnA, b.columnA, c.columnA
from a, b, c
where a.columnB (+) = b.columnB
and a.columnC (+) = c.columnB
其中b和c是同一个表
a的columnB和columnC都有可能为空
结果是的a的columnB为空时查不出来
这是什么原因呢? [/B]

外连接好像连错方向了啊.倒
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
最初由 zydx_zydx 发布
[B]b和c是一个表,a表的columnb=b.columnb,cloumnc=c.columnb.那么a表的b,c两个字段的值是一样的么?能说得清楚点么。 [/B]

a表的b,c两个字段的值不是一样的
就是a表有b,c两个字段,都可能为空,需要参照同同一个表来得到它们的中文名
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
最初由 Asda双心客 发布
[B]
外连接好像连错方向了啊.倒 [/B]

不好意思,是写反了。。。
更正如下
select a.columnA, b.columnB, c.columnB
from a, b, c
where b.columnB (+) = a.columnB
and c.columnB (+) = a.columnC
其中b和c是同一个表
a的columnB和columnC都有可能为空
结果是的a的columnB为空时查不出来
是笔误啊
我的意思就是像上面这样写,查不出来
a的columnC为空时,能查出来
a的columnB为空时,查不出来
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
用full out join
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
create table xxx as select * from dual;
create table yyy as select * from dual;
insert into xxx select NULL from dual;
insert into yyy select NULL from dual;
SELECT * FROM xxx a FULL OUTER JOIN yyy b ON a.dummy = b.dummy;
回复

使用道具 举报

千问 | 2013-8-22 09:58:03 | 显示全部楼层
drop table table1;
drop table table2;
create table table1
(
id integer,
classid integer,
classid1 integer
);
insert into table1 values (1,11,111);
insert into table1 values (1,null,222);
insert into table1 values (1,33,null);
insert into table1 values (1,44,444);
commit;
create table table2
(
classid integer,
classname varchar2(10)
);
insert into table2 values (11,'name11');
insert into table2 values (22,'name22');
insert into table2 values (33,'name33');
insert into table2 values (111,'name111');
commit;
select a.id,b.classname,c.classname
from table1 a,table2 b,table2 c
where a.classid=b.classid(+) and a.classid1=c.classid(+);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行