问题是这样的
多个表间的查询
table1(tno,name1)
table2(tno,name2,idcard)
table3(idcard,name3)前提table1和table2的数据是一一对应的(通过tno连接),table2与table3通过idcard连接,但是table3中的idcard有重复的情况(idcard:身份证号)要实现的是把三个表中的name1,name2,name3查出来(table3中的idcard若有重复的则取一个name3就可以了)大侠们帮帮忙吧,,,

解决方案 »

  1.   


    select a.*,b.*,c.name3
    from table1 as a
        inner join table2 as b on a.tno=b.tno
        inner join (select idcard,min(name3) as name3 from table3 group by idcard) as c on b.idcard=c.idcard
      

  2.   


    select a.name1,b.name2,c.name3
    from table1 a
    left join table2 b 
    on a.tno = b.tno
    left join table3 c
    on b.idcard = c.idcard
      

  3.   

    select t1.*, t2.name2, t3.* 
    from table1 t1 join table2 t2 on t1.tno=t2.tno
      join (select idcard, name3=min(name3) from table3 group by idcard) t3 on t2.idcard=t3.idcard
      

  4.   

    select t1.name1,t2.name2,t3.name3 from table1 t1,table2 t2,
    (select idcard,max(name3) name3 from table3 group by idcard) t3
    where t1.tno = t2.tno and t2.idcard = t3.idcard
      

  5.   


    select
    Name2,
    [Name]=case when (select count(1) from table3 where idcard=c.idcard)>1 then min(name3) else Name1 end--记录大于1取Name1

    from 
    table1 a 
    join 
    table2 b on a.tno=b.tno
    join 
    table3 c on b.idcard=c.idcard
    group by Name2,Name1
      

  6.   


    今天早上看了各位的回帖,还是有问题to wangtiecheng: 您写的这种group by 以后再取其中一个的方法理论上应该是对的,
    可是我试了下,还是有问题,
    我的table1,table2可以一一对应切记录数为1659,用了你的方法后,三个表查询出来的数据记录数不是1659而
    是少了几十条记录,这是怎么回事呀?
      

  7.   

    select 
    distinct
    a.name1,
    b.name2,
    c.name3
    from table1 a
    join table2 b on a.tno = b.tno
    left join table3 c on c.idcard = b.idcard
      

  8.   

    select t1.name1,t2.name2,t3.name3 from table1 as t1,table2 as t2,
    table3 as t3
    where t1.tno = t2.tno and t2.idcard = t3.idcard  
    group by t3.idcaard
      

  9.   

    数据丢失是因为table3并非包含所有的tno,采用左联接,以table1为基准,这样不存在的就补Null.select   a.*,b.*,c.name3 
    from   table1   as   a 
            left join   table2   as   b   on   a.tno=b.tno 
            left join   (select   idcard,min(name3)   as   name3   from   table3   group   by   idcard)   as   c   on   a.idcard=c.idcard
      

  10.   

    select t1.name1,t2.name2,t3.name3 from table1 t1,table2 t2,
    (select idcard,name3 from table3 group by idcard,name3) t3
    where t1.tno = t2.tno and t2.idcard = t3.idcard
      

  11.   

    谢谢诸位牛人,因为个别table2中的idcard在table3中没有所以查询出来后对了数据,结贴...