3张表:表a:
name score
冠希 20
阿娇 30
小三 20表b:
name score
冠希 40
阿娇 50
小四 70表c:
name score
冠希 100
阿娇 100
小五 100
3张表人员不一样,以表c的人员为准,求每个人分别在c、b中的score与a的score之差(如果c中的人员在a、b中不存在,则其在a、b中的scroe按0计算)。大侠们指教一下这个sql语句该怎么写~~我用的mysql

解决方案 »

  1.   


    --不会mysql
    select c.name,c.score-nvl(a.score),nvl(b.score)-nvl(a.score)
    from a,b,c
    where c.name=a.name(+) and c.name=b.name(+)
      

  2.   


    create table a(
      name varchar2(10),
      score int
      );
      
    create table b(
           name varchar2(10),
           score int
           );
           
    create table c(
           name varchar2(10),
           score int
           );
           
    --data:
    insert into a(name,score) values('冠希',20);
    insert into a(name,score) values('阿娇',30);
    insert into a(name,score) values('小三',20);insert into b(name,score) values('冠希',40);
    insert into b(name,score) values('阿娇',50);
    insert into b(name,score) values('小四',70);insert into c(name,score) values('冠希',100);
    insert into c(name,score) values('阿娇',100);
    insert into c(name,score) values('小五',100);/*
    3张表人员不一样,以表c的人员为准,
    求每个人分别在c、b中的score与a的score之差,
    如果c中的人员在a、b中不存在,则其在a、b中的scroe按0计算.
    */SQL> select c.name, c.score-nvl(a.score,0) as score
      2  from c,a
      3  where c.name=a.name(+)
      4  union all
      5  select c.name,c.score-nvl(b.score,0)
      6  from c,b
      7  where c.name=b.name(+);
    /*
    NAME            SCORE
    ---------- ----------
    冠希               80
    阿娇               70
    小五              100
    冠希               60
    阿娇               50
    小五              1006 rows selected
    */
      

  3.   


    --union过滤掉了完全重复的行
    --union all包含了完全重复的行
    SQL> select c.name, c.score-nvl(a.score,0)
      2  from c,a
      3  where c.name=a.name(+)
      4  union
      5  select c.name,c.score-nvl(b.score,0)
      6  from c,b
      7  where c.name=b.name(+);
    /*
    NAME       C.SCORE-NVL(A.SCORE,0)
    ---------- ----------------------
    阿娇                           50
    阿娇                           70
    冠希                           60
    冠希                           80
    小五                          100
    */
      

  4.   

    create  table a
    (name varchar2(20),
    score number)
    create  table b
    (name varchar2(20),
    score number)
    create  table c
    (name varchar2(20),
    score number)
    insert into a values('冠希',20);
    insert into a values('阿娇',30);
    insert into a values('小三',20);insert into b values('冠希',40);
    insert into b values('阿娇',50);
    insert into b values('小四',70);insert into c values('冠希',100);
    insert into c values('阿娇',100);
    insert into c values('小五',100);
    select c.name name,(c.score-nvl(a.score,0)) "scorec-a",(c.score-nvl(b.score,0)) "scorec-b" from c c 
    left join a a on c.name = a.name
    left join b b on c.name = b.name