有这样两张表表1 ID       Name
-----------------
 1
 2
 3
 4
 5
 6
 7
 8表2Name
-----------------
AAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
HHHH表1有两个字段,Name字段为空,而表2只有一个Name字段没有对应的ID。问题我想把表2中Name值插入到表1中去,请教这条SQL如何写?

解决方案 »

  1.   

    update tb1 set name = n.name from m , ((select count(1) from t2 where name < t.name) + 1 id , name from t2 t) n where m.id = n.id 
      

  2.   

    --sql 2000--如果t1表的ID从1开始顺序往下,可如下操作:
    create table t1(ID int, Name varchar(10))
    insert into t1 values( 1,'')
    insert into t1 values( 2,'')
    insert into t1 values( 3,'')
    insert into t1 values( 4,'')
    insert into t1 values( 5,'')
    insert into t1 values( 6,'')
    insert into t1 values( 7,'')
    insert into t1 values( 8,'')
    create table t2(Name varchar(10))
    insert into t2 values('AAAA')
    insert into t2 values('BBBB')
    insert into t2 values('CCCC')
    insert into t2 values('DDDD')
    insert into t2 values('EEEE')
    insert into t2 values('FFFF')
    insert into t2 values('GGGG')
    insert into t2 values('HHHH')
    goupdate t1 set name = n.name from t1 m , (select (select count(1) from t2 where name < t.name) + 1 id , name from t2 t) n where m.id = n.id select * from t1drop table t1 , t2/*
    ID          Name       
    ----------- ---------- 
    1           AAAA
    2           BBBB
    3           CCCC
    4           DDDD
    5           EEEE
    6           FFFF
    7           GGGG
    8           HHHH(所影响的行数为 8 行)*/--如果t1表的ID不是顺序的,可如下操作:
    create table t1(ID int, Name varchar(10))
    insert into t1 values( 1,'')
    insert into t1 values( 2,'')
    insert into t1 values( 3,'')
    insert into t1 values( 4,'')
    insert into t1 values( 5,'')
    insert into t1 values( 6,'')
    insert into t1 values( 7,'')
    insert into t1 values( 8,'')
    create table t2(Name varchar(10))
    insert into t2 values('AAAA')
    insert into t2 values('BBBB')
    insert into t2 values('CCCC')
    insert into t2 values('DDDD')
    insert into t2 values('EEEE')
    insert into t2 values('FFFF')
    insert into t2 values('GGGG')
    insert into t2 values('HHHH')
    goupdate t1 set name = n.name from t1 m , 
    (select (select count(1) from t1 where id < t.id) + 1 px , id from t1 t) o,
    (select (select count(1) from t2 where name < t.name) + 1 px , name from t2 t) n 
    where m.id = o.id and o.px = n.pxselect * from t1drop table t1 , t2/*
    ID          Name       
    ----------- ---------- 
    1           AAAA
    2           BBBB
    3           CCCC
    4           DDDD
    5           EEEE
    6           FFFF
    7           GGGG
    8           HHHH(所影响的行数为 8 行)*/
      

  3.   

    --sql 2005--如果t1表的ID从1开始顺序往下,可如下操作:
    create table t1(ID int, Name varchar(10))
    insert into t1 values( 1,'')
    insert into t1 values( 2,'')
    insert into t1 values( 3,'')
    insert into t1 values( 4,'')
    insert into t1 values( 5,'')
    insert into t1 values( 6,'')
    insert into t1 values( 7,'')
    insert into t1 values( 8,'')
    create table t2(Name varchar(10))
    insert into t2 values('AAAA')
    insert into t2 values('BBBB')
    insert into t2 values('CCCC')
    insert into t2 values('DDDD')
    insert into t2 values('EEEE')
    insert into t2 values('FFFF')
    insert into t2 values('GGGG')
    insert into t2 values('HHHH')
    goupdate t1 set name = n.name from t1 m , (select row_number() over(order by name) id , name from t2 t) n where m.id = n.id select * from t1drop table t1 , t2/*
    ID          Name
    ----------- ----------
    1           AAAA
    2           BBBB
    3           CCCC
    4           DDDD
    5           EEEE
    6           FFFF
    7           GGGG
    8           HHHH(8 行受影响)
    */--如果t1表的ID不是顺序的,可如下操作:
    create table t1(ID int, Name varchar(10))
    insert into t1 values( 1,'')
    insert into t1 values( 2,'')
    insert into t1 values( 3,'')
    insert into t1 values( 4,'')
    insert into t1 values( 5,'')
    insert into t1 values( 6,'')
    insert into t1 values( 7,'')
    insert into t1 values( 8,'')
    create table t2(Name varchar(10))
    insert into t2 values('AAAA')
    insert into t2 values('BBBB')
    insert into t2 values('CCCC')
    insert into t2 values('DDDD')
    insert into t2 values('EEEE')
    insert into t2 values('FFFF')
    insert into t2 values('GGGG')
    insert into t2 values('HHHH')
    goupdate t1 set name = n.name from t1 m , 
    (select row_number() over(order by id) px , id from t1 t) o,
    (select row_number() over(order by name) px , name from t2 t) n 
    where m.id = o.id and o.px = n.pxselect * from t1drop table t1 , t2/*
    ID          Name
    ----------- ----------
    1           AAAA
    2           BBBB
    3           CCCC
    4           DDDD
    5           EEEE
    6           FFFF
    7           GGGG
    8           HHHH(8 行受影响)
    */
      

  4.   

    /*
    ID Name
    -----------------
     1
     2
     3
     4
     5
     6
     7
     8表2Name
    -----------------
    AAAA
    BBBB
    CCCC
    DDDD
    EEEE
    FFFF
    GGGG
    HHHH
    */go
    if OBJECT_ID('A')is not null
    drop table A
    go
    create table A(
    ID int,
    Name varchar(4)
    )
    go
    insert A
    select 1,'' union all
    select 2,'' union all
    select 3,'' union all
    select 4,'' union all
    select 5,'' union all
    select 6,'' union all
    select 7,'' union all
    select 8,''go
    if OBJECT_ID('B')is not null
    drop table B
    go
    create table B(
    Name varchar(4)
    )
    go 
    insert B
    select 'AAAA' union all
    select 'BBBB' union all
    select 'CCCC' union all
    select 'DDDD' union all
    select 'EEEE' union all
    select 'FFFF' union all
    select 'GGGG' union all
    select 'HHHH'update A set Name=m.Name from (select ROW_NUMBER()over(order by getdate()) as num,* from B)m
    where A.ID=M.num
    select *from A
    /*
    ID Name
    1 AAAA
    2 BBBB
    3 CCCC
    4 DDDD
    5 EEEE
    6 FFFF
    7 GGGG
    8 HHHH
    */
      

  5.   

    非常感谢dawugui,t1.id并不是顺序的,再次感谢!