首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle表关联问题

2014-01-28 
oracle表关联问题:表a,b.其中表a字段bh,mc.表b字段ID,bh.现在要做一个关联查询: 如下: a中数据 b中数据 bh

oracle表关联问题:
表a,b.其中表a字段bh,mc.表b字段ID,bh.现在要做一个关联查询:
如下:
a中数据 b中数据
bh mc ID bh
01 a 001 02
02 b 001 03
03 c 001 05
04 d
05 e
a中的bh与b中的bh对应,现在要返回表a中的所有数据,并添加一个字段flag,如果a中的bh在b中的bh可找到,则flag列值为1,反之为0,即返回如下
bh mc flag
01 a 0
02 b 1
03 c 1
04 d 0
05 e 1

------解决方法--------------------------------------------------------
select a.bh,a.mc,decode(nvl(b.bh,-1),-1,0,1) flag
from a,b
where a.bh=b.bh(+)

------解决方法--------------------------------------------------------
SQL> select a.bh, a.mc, decode(b.id,null,0,1)as flag from test_a a left join test_b b on a.bh = b.bh
2 order by a.bh
3 ;

BH MC FLAG
-- -- ----------
01 a 0
02 b 1
03 c 1
04 d 0
05 e 1

------解决方法--------------------------------------------------------
楼主的是oracle9i或以上的版本??是的话用这个:
select a.bh,a.mc,decode(nvl(b.bh,-1),-1,0,1) flag
from a RIGHT OUTER JOIN b ON a.bh=b.bh
------解决方法--------------------------------------------------------
楼主看看外连接,left outer join 和right outer join。
------解决方法--------------------------------------------------------
SQL> select * from test_b;

BH ID
-- ---
02 001
03 001
05 001
05 002
04 003

SQL>
SQL> select a.bh, a.mc, decode(b.id,null,0,1)as flag from test_a a left join test_b b on a.bh = b.bh and b.id = '001'         

热点排行