有3个表,每个表结构如下:
A表(代号1,值1)
B表(代号2,值2)
C表(代号3,值3)查询出A表中代号和B表中代号相同,且值不相同的那些数据;A表中代号和C表中代号相同,且值不相同的那些数据;B表中代号和C表中相同,且值不相同的那些数据最后得出的数据中代号要唯一,如果A表中代号和B表中代号相同,且值不相同的代号在C表中不存在,则值3填空;同理,值1,值2也如此。现要得出如下结果表结果:
代号   值1   值2  值3有人能理解并给出答案么 ?在线等,谢谢了

解决方案 »

  1.   

    每人理解么?
    这么说吧,比如
    a表    11    KK
          12    pp
          13    qqb表    12    zz
          14    ddc表    14    ff
          15    aa
          11    kk最后要的结果是  
           代号   值1   值2  值3
           11    kk         kk
          12    pp    zz   
          13    qq
          14          dd   ff
          15               aa
          
      

  2.   

    不知道如何一句写完。用临时表可以做到。--制造测试环境
    declare @a table
    (
       id int, dd varchar(10)
    )
    declare @b table
    (
       id int, dd varchar(10)
    )
    declare @c table
    (
       id int, dd varchar(10)
    )insert into @a (id, dd) values(11,'KK')
    insert into @a (id, dd) values(12,'pp')
    insert into @a (id, dd) values(13,'qq')insert into @a (id, dd) values(12,'zz')
    insert into @a (id, dd) values(14,'dd')insert into @a (id, dd) values(14,'ff')
    insert into @a (id, dd) values(15,'aa')
    insert into @a (id, dd) values(11,'kk')--开始处理数据
    declare @d table
    (
       id int, dd1 varchar(10), dd2 varchar(10), dd3 varchar(10)
    )select into @d (id)
    select id from @a
    union
    select id from @b
    union
    select id from @cupdate @d
       set dd1 = (select dd from @a where id = d.id),
           dd2 = (select dd from @b where id = d.id),
           dd3 = (select dd from @c where id = d.id)
    from @d d--显示结果
    select * from @d
      

  3.   

    这个做法和我目前做的一致,有人能用一条SQL语句解决么?
      

  4.   

    不是没人玩VB,而是你这个问题根本不是VB的问题
    而是SQL的问题,发到这里都不知道你是什么数据库
    没法写啊,其实就是个全表连接,然后按照你的条件过滤一下即可
      

  5.   


    select d.id,a.v as va ,b.v as vb ,c.v as vc from 
    (
    select id from a 
    union select id from b
    union select id from c 
    ) d left join a on d.id = a.id left join b on d.id = b.id left join c on d.id = c.id
      

  6.   

    CREATE TABLE A(
        id int, fld varchar(10)
    )
    GO
    CREATE TABLE B(
        id int, fld varchar(10)
    )
    GO
    CREATE TABLE C(
        id int, fld varchar(10)
    )
    GO
    insert into A (id, fld) values(11,'KK')
    insert into A (id, fld) values(12,'pp')
    insert into A (id, fld) values(13,'qq')
    GO
    insert into B (id, fld) values(12,'zz')
    insert into B (id, fld) values(14,'dd')
    GO
    insert into C (id, fld) values(14,'ff')
    insert into C (id, fld) values(15,'aa')
    insert into C (id, fld) values(11,'kk')GO
    select D.id,A.fld,B.fld,C.fld
    from 
        (select distinct id from (select id from A
               union select id from B
               union select id from C) t) d
        left join A on D.id=A.id
        left join B on D.id=B.id
        left join C on D.id=C.id 
    GO
    drop table A
    drop table B
    drop table C
    GO如果你表ABC的fld字段同名,那么left join中的表名必为查询,比如A表:
      

  7.   

    哦,有不同,你外面又包了一层distinct
    不过这样做没有作用的
    select id from A union select id from B union select id from C已经不包含重复数据了,咱用的不是 union alldistinct画蛇添足了,还让数据库去进行了一次无畏的排序
      

  8.   


    呵呵,说实话看你没有distinct才回的,原来是我错了....
      

  9.   


    select ISNULL(ISNULL(a.id,b.id),c.id), ISNULL(a.v,''),ISNULL(b.v,''),ISNULL(c.v,'')
    from a full join b on a.id=b.id full join c on a.id=c.id
      

  10.   


    这个结果是:
    11 KK kk
    12 pp zz
    13 qq
    14 dd
    15 aa
    14 ff
      

  11.   

    晕了,格式不对,再试试:11    KK          kk
    12    pp    zz
    13    qq
    14          dd
    15                aa
    14                ff
      

  12.   

    SQL code
    select d.id,a.v as va ,b.v as vb ,c.v as vc from 
    (
    select id from a 
    union select id from b
    union select id from c 
    ) d left join a on d.id = a.id left join b on d.id = b.id left join c on d.id = c.id
    这个答案是我需要的,非常感谢!