日期:2014-05-17  浏览次数:20920 次

求我这种多表查询语句应该如何写
表很多,有5张表,其中A B C D四个表都只有 YHID(用户ID) ZS(总数) F表是YHID XM(姓名),
我想统计A B C D这四个表的全部数据,如果其中某个表没有这个YHID,而其他表有,在ZS里用0表示,我试过关联
select f.xm,nvl(a.zs,0),nvl(b.zs,0),nvl(c.zs,0),nvl(d.zs,0),a.zs+b.zs+c.zs+d.zs from A,B,C,D,F where a.yhid=b.yhid and a.yhid=f.yhid .....
这些 只得到很少量数据,而我试着用左连接时候,发现由于这ABCD四个表里,YHID不一致,有些表里的YHID有些表里就不一定有,比如A表有104条记录,B表有90条记录,C表有85条记录,D表有67条记录,但是YHID这个不一定是记录多的就一定包括住记录少的,全部无重复加起来是有120来条记录的,所以无法进行左连接,,我想把这里面全部的120条记录都取出来,得到的结果中YHID都全部齐全,ZS里如果是NULL的变为0,这样能做到吗?如何做到,跪求大神帮忙

------解决方案--------------------
就模拟了3个表,意思是一样的
SQL code

with a as (
select '1' id,7 num from dual
union all
select '2' id,8 num from dual
),
b as (
select '1' id,9 num from dual
union all
select '3' id,10 num from dual
),
c as (
select '1' id,'AA' na from dual
union all
select '2' id,'BB' na from dual
union all
select '3' id,'CC' na from dual
)

select c.na,nvl(a.num,0),nvl(b.num,0)
from a,b,c
where a.id(+) = c.id
and b.id(+) = c.id