有表A,是记录人员信息的,A01是人员编号,A02记录人是否内部人员,
表B,  是记录住房信息的,B01是住房编号,B02是住房地址,B03记录是否是自单位房产,
表C,  是记录人员和住房信息的,C01是住房ID,C02是人员ID,但是有可能人有几套住房,
现在的问题是,统计外部人员的住自单位住房的情况,但要按照表B的住房地址进行排序,
统计语句如下:
select * from A 
where A02=0 and A01 in(select c02 from C 
where C01 in (select B01 from B where B02='自己单位')) 
order by A01
但是要安装地址进行排序就比较犯难了,请各位执教!

解决方案 »

  1.   

    select * from A a,B b,C c where a.a1=b.b1 and c.c1='自己单位'
    这么写
      

  2.   

    我自己拼了这样的语句,但是出来的记录多,因为一个人有几套房子的
    select * from A,B,C 
    where (A.A02=0 and A.A01 =C.C02 AND C.C01 =B.B01 AND B.B02='自己单位')  
    order by A. A01
    还请各位高手指点啊!
    在线等!
      

  3.   

    select * from A,B,C 
    where (A.A02=0 and A.A01 =C.C02 AND C.C01 =B.B01 AND B.B02='自己单位')  group by A.A01 having 
    可是having后该怎么写呢?
    请写得详细点好吗?
      

  4.   

    select * from A,B,C 
    where (A.A02=0 and A.A01 =C.C02 AND C.C01 =B.B01 AND B.B02='自己单位')  group by A.A01 having count(C.C01)>0?

      

  5.   

    因为有一个人有几套房子的情况存在,所以用上面的语句并不能得到我的意图
    只好到excel表中对该字段进行字符排序了,
    简单而且实用!
    呵呵,
    还有什么高招吗?
    否则关系数据库的范式太麻烦了,不如冗余,
    统计查询速度块而且简单!
      

  6.   

    select a.a01,b.b01,b.b02 from a,b
    where b.b03='自己单位' and b.b01 in (
    select c01 from c where c02 in (select a01 from a where a02=0)
    )
    order by b.b03
    ;
      

  7.   

    select b02,c02 from a,b,c where a.A01=c.C02 and b.B01=c.C01 and a.A02='外部人员' and b.B03='自己单位' order by b02
      

  8.   

    对不起,上面fangxiaohong7的是错的。
    这个是对的,测试过的。
    select c.c02,b.b01,b.b02 from c,b
    where b.b03='自己单位' and b.b01=c.c01 and b.b01 in (
    select c01 from c where c02 in (select a01 from a where a02=0)
    )
    order by b.b03
    ;
      

  9.   

    呵呵,fangxiaohong7:谢谢你
    不过出来的数字跟原来的不一样,
    我自己想了一下,原来是按照人员表进行查询
    现在我按照住房表进行查询,所以我的sql语句如下:
    有表A,是记录人员信息的,A01是人员编号,A02记录人是否内部人员,
    表B,  是记录住房信息的,B01是住房编号,B02是住房地址,B03记录是否是自单位房产,
    表C,  是记录人员和住房信息的,C01是住房ID,C02是人员ID,但是有可能人有几套住房,
    select * from b where
    b.b03='自己单位' and b01 in
    (select c01 from c where c02 in
    (select a01 from a where a02=0))
    order by b02;
    不过很不幸,这张方法出来的数字还是和原来的不符
    我看了一下c,有6条重复记录,但还是对不上
    原来是491条,你的方法查处来是536条,我的方法查处来是521条
    不知道为什么会不同,晕了!
      

  10.   

    a.(0,1) in b.(0,1,2,3)与
    b.(0,1,2,3) in a.(0,1)取出不同的阿a,b表很可能就不同的,相同到有些不对头了。