select a.id,b.subid,a....,b.... from a,b where a.id = b.id

解决方案 »

  1.   

    谢谢上面各位!
    再补充一点:也就是以A表的结构为主,把B表的数据列附加到A表列中,组成一个新的表.    谢谢!我仍在等待!
      

  2.   

    select a.id,.....,b.id.....
    from b jion a
    on a.id = b.id
      

  3.   

    楼上的兄弟只回答了一半,我的另外一个条件是:在新表中只能象A表一样,不能有重复的ID.  假设B表有2个记录对应A表中第一条记录(即ID=1)的话,你的结果会是在新表中有2个重复的ID(1)和相应的值,而我的意思是把B表中的2个对应值合并附加到同1个记录中的列中去.就是这个意思:
    新表
        a.id ... b.id, b1(对应a的第一个值), b2(对应a的第二个值)
         ...
      

  4.   

    左连接嘛!select a.id,其他字段 into 新表  from A表 a left join B表 b on a.id=b.id
      

  5.   


    b1(对应a的第一个值), b2(对应a的第二个值)
    --^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^如果你的b表有10条重复的那不是有10列???
      

  6.   

    不不!大力兄弟的方法也是产生了同1个ID两行记录(分别是b1和b2),并没有把这两行记录合并到同一行记录中来!谢谢!
      

  7.   

    是的,如果b表有2个值与a中的一个记录对应的话,在新表中应添加2个列.(现在假设b表最多有两个值与a表对应,即二对一的关系),谢谢!
      

  8.   

    依小弟之见,得写个程序来进行吧。我以ASP为例。
    先读出所有A表的记录
    rs.open "select * from A表",conn,1,1
    对A表的每一条记录在B表中寻找对应记录
    do while not rs.eof
    set rs1=server.createobject("ADODB.RecordSet")
    rs1.open "select * from B表 where id="+rs("id"),conn,1,1
    设新表的结构为只有一个字段id的新表C表,没有请在执行前创建好。
    判断C表的字段个数-1后是否大于rs1的记录数。如果大于则执行记录添加,先判断rs1是否有记录数,如果有则update那条记录,如果没有则先rs1.addnew,再update。如果不大于,则增加C表的字段,增加的字段数为大于多少增加多少。增加好后再进行数据的添加。建立C表之前,还可以先找出在B表中,同一ID记录数最多的记录数是多少,然后再来创建C表,这样就不用在对第个ID的记录数与字段数进行判断,速度会快很多。最后再对记录进行逐条添加,同这一ID,则update,没有,则append。(后面这种方法要好点。)
      

  9.   

    好的,表如下:
    a表:
    -------------
    ID  Name Age
    -------------
    1   Joan  23
    2   John  26
    3   Alan  25b表:
    --------------------
    ID   AID  Book
    --------------------
    1   3     <<river>>
    2   1     <<mother>>
    3   1     <<C++>>
    4   2     <<love>>
    --------------------a表主键ID,与b表AID关联;现在请合并为新表如下:c表
    ---------------------------------------------
        a.ID a.Name  a.Age b.AID  b.book1  b.book2
    ---------------------------------------------
         1   Joan     23    1    <<mother>> <<C++>>
         2   John     26    2    <<love>>   NULL
         3   Alan     25    3    <<river>>  NULL
    ---------------------------------------------
    以上就是我想问的,请各位兄弟捧场,救救兄弟!谢谢!
      

  10.   

    那这样新表的表结构是不确定了了。用一条sql语句恐怕是不行吧。
      

  11.   

    增加关键字,把重复的记录过滤:
    Select DISTINCT a.ID,..........
    关键字 DISTINCT 的作用就是把重复的记录过滤。
      

  12.   

    这样的话,
    表的结构不是要根据表B中的重复记录的条数来定
    那不是要找出以A表中的ID在B中的记录数最多动态来决定字段数
      

  13.   

    我的意见:
    如果是依据b表中的aid列相应行的值生成c表中相应的列好象只能用动态sql语句了
    如果aid列的值只有一种或者两种好象还能生成吧!
      

  14.   

    sqlserver2000测试通过:declare @imax int,@i int,@str varchar(8000)
    set @imax = 0
    set @i = 0
    select top 1 @imax = count(*) from b
    group by aid
    order by count(*) descselect * into #t from awhile @i < @imax
    begin
    set @str = 'alter table #t add book' + convert(varchar,@i+1) + ' varchar(20) null'
    exec(@str)
    set @str = 'update m set m.book' + convert(varchar,@i+1) + '=n.book from #t as m,
    (select b2.book,min(b2.aid) as aid from b as b1,b as b2 
    where b1.aid in (select aid from b group by aid having count(*) >' + convert(varchar,@i) + ') 
    and b1.aid = b2.aid and b1.id <= b2.id
    group by b2.book
    having count(*) = ' + convert(varchar,@i+1) +
    ') as n where m.id = n.aid'
    exec(@str)
    set @i = @i + 1
    end
    select * from #t
    drop table #t
      

  15.   

    附上测试语句:
    create table a(id int,name varchar(10))
    create table b(id int,aid int,book varchar(20))
    insert a values(1,'joan')
    insert a values(2,'john')
    insert a values(3,'alan')insert b values(1,3,'river')
    insert b values(2,1,'mother')
    insert b values(3,1,'C++')
    insert b values(4,2,'love')
    insert b values(5,1,'hate')
    insert b values(6,3,'gaoding')
      

  16.   

    非常感谢各位兄弟鼎力相助,尤其是 bluepower2008(蓝色力量) 兄弟,肯定占用了你不少宝贵时间,诚挚感谢!      ---最无私的程序员才是真正的技术高手