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

SQL.求指导

2013-02-04 
求一个SQL...求指导本帖最后由 kenticny0270 于 2012-12-05 21:37:54 编辑需求:有两张表 tableA 和 tableB

求一个SQL...求指导
本帖最后由 kenticny0270 于 2012-12-05 21:37:54 编辑 需求:有两张表 tableA 和 tableB
tableA 的字段有 customid managerid deposit
tableB 的字段有 customid managerid loan
两张表都是以(customid,managerid)作为唯一标识
现在要有个查询,查询到的字段为customid managerid deposit loan
tableA和tableB中的customid和managerid 有部分重复,还有一部分是不同的。
如果customid和managerid同时存在在两张表中,就合并
例如:
  tableA               customid     managerid    deposit
                              1001           3000            4000
  tableB               customid     managerid      loan
                              1001           3000            3000
  查询结果             customid     managerid    deposit    loan
                              1001           3000            4000       3000
如果customid和managerid单独存在的话:
例如:
  tableA               customid     managerid     deposit
                              1001           2000            3000
  tableB               customid     managerid      loan
                              2001           3000            4000
  查询结果             customid     managerid      deposit    loan
                              1001            2000             3000        NULL
                              2001            3000             NULL        4000




需求说完了...不知道说清楚了么....求各位大神指教....
[解决办法]
用full join就可以了。

select greatest(nvl(tableA.customid,0),nvl(tableB.customid,0)) customid,
       greatest(nvl(tableA.managerid,0),nvl(tableB.managerid,0)) managerid,
   deposit,loan  from
  tableA full join tableB on
  tableA.customid=tableB.customid and tableA.managerid=tableB.managerid;

[解决办法]
来个通用版本吧,case其实效率也挺高的!

--db2上测试,
with taba as(
     select '1001' cid,'3000' mid,4000 dps from sysibm.sysdummy1
     union all
     select '1002' cid,'8000' mid,47000 dps from sysibm.sysdummy1),
     tabb as(
     select '1001' cid,'2000' mid,3000 ln from sysibm.sysdummy1
     union all
     select '1001' cid,'3000' mid,5000 ln from sysibm.sysdummy1)
select case when a.cid is null then b.cid else a.cid end,
          case when a.mid is null then b.mid else a.mid end,
          dps,ln
  from taba a full join tabb b
    on a.cid=b.cid
   and a.mid=b.mid
--------------------------------
1001300040005000
100120003000
1002800047000

热点排行