表person有字段:pk_id,p_name
表bank有字段:pk_id,b_name,money
表wife有字段:pk_id,country,number表bank和wife的pk_id为person的外键(对应person的pk_id),person的一条记录对应多条bank和wife的纪录。意思就是一个人可以在多个银行存钱,可以在多个国家里有老婆。比如:
person:
-------
001,张山
002,李四bank:
----------
001,中行,5000
001,农行,1000
002,中行,2000
002,农行,3000wife:
---------------
001,USA,10
001,CN,100
002,USA,0
002,CN,1请问,怎么用SQLl连表查询 张三和李四 总存款 和 老婆总数? 

解决方案 »

  1.   

    select (t1.pk_id,t2_pk_id) pk_id , isnull(t1.money_sum,0) money_sum , isnull(t2.老婆_sum,0) 老婆_sum from
    (select a.pk_id , sum(money) money_sum from person a,bank b where a.pk_id = b.pk_id) t1
    full join
    (select a.pk_id , count(*) 老婆_sum from person a,wife b where a.pk_id = b.pk_id) t2
    on t1.pk_id = t2.pk_id
      

  2.   

    select a.p_name ,sum(b.money )as  总存款,count(c.number)as 老婆总数
    from person a left join bank b on a.pk_id=b.pk_id
                  left join wife c on a.pk_id=c.pk_id
    group by a.p_name 
      

  3.   

    to dawugui:语法错误啊??from子句有问题
    to fa_ge:你的不对。
      

  4.   

    --不好意思。
    select isnull(t1.pk_id,t2.pk_id) pk_id , isnull(t1.money_sum,0) money_sum , isnull(t2.老婆_sum,0) 老婆_sum from
    (select a.pk_id , sum(money) money_sum from person a,bank b where a.pk_id = b.pk_id) t1
    full join
    (select a.pk_id , sum(number) 老婆_sum from person a,wife b where a.pk_id = b.pk_id) t2
    on t1.pk_id = t2.pk_id
      

  5.   

    你还是有个错误,在每个子查询中没有group by a.pk_id,加了就ok了。
    正确答案:
    select isnull(t1.pk_id,t2.pk_id) pk_id , isnull(t1.money_sum,0) money_sum , isnull(t2.老婆_sum,0) 老婆_sum from
    (select a.pk_id , sum(money) money_sum from person a,bank b where a.pk_id = b.pk_id group by a.pk_id) t1
    full join
    (select a.pk_id , sum(number) 老婆_sum from person a,wife b where a.pk_id = b.pk_id group by a.pk_id) t2
    on t1.pk_id = t2.pk_id感谢各位,特别是dawugui,ths!