歌曲表music
id   name   special key
1    歌曲1   专辑1
2    歌曲2   专辑1 
3    歌曲3   专辑2
4    歌曲5   专辑1
5    歌曲6   专辑2专辑表spcial
id   name    key 
1    专辑1   流行歌曲
2    专辑2   经典歌曲现在我想update music set key=(spcial表里的key值) where music.special=spcial.name相当与update后的结果:
id   name   special key
1    歌曲1   专辑1  流行歌曲
2    歌曲2   专辑1  流行歌曲 
3    歌曲3   专辑2  经典歌曲
4    歌曲5   专辑1  流行歌曲
5    歌曲6   专辑2  经典歌曲我不想用程序去循环实现,
能不能用一句sql语句实现或是存储过程实现
存储过程该怎么写?急求!

解决方案 »

  1.   

    update music set key=b.key from music a left join special b on a.special=b.name
      

  2.   

    /*
    --测试:
    create table music(id int,name varchar(20),special varchar(20),[key] varchar(20))
    insert into music 
    select 1,    '歌曲1',   '专辑1','' union all
    select 2,    '歌曲2',   '专辑1','' union all
    select 3,    '歌曲3',   '专辑2','' union all
    select 4,    '歌曲5',   '专辑1','' union all
    select 5,    '歌曲6',   '专辑2',''create table special(id int,name varchar(20),[key] varchar(20)) 
    insert into special
    select 1,    '专辑1',   '流行歌曲' union all
    select 2,    '专辑2',   '经典歌曲'update music set [key]=b.[key] from music a left join special b on a.special=b.nameselect * from musicdrop table music,special
    */--结果:
    /*
    id          name                 special              key                  
    ----------- -------------------- -------------------- -------------------- 
    1           歌曲1                  专辑1                  流行歌曲
    2           歌曲2                  专辑1                  流行歌曲
    3           歌曲3                  专辑2                  经典歌曲
    4           歌曲5                  专辑1                  流行歌曲
    5           歌曲6                  专辑2                  经典歌曲(所影响的行数为 5 行)
    */
      

  3.   

    declare @t table(id int , name varchar(800), special varchar(800),key1 varchar(800))
    declare @t1 table(id int,name varchar(800), key1 varchar(800))insert into @t
    select 1, '歌曲1', '专辑1', '' union
    select 2, '歌曲2', '专辑1', ''  union
    select 3, '歌曲3', '专辑2', ''  union
    select 4, '歌曲5', '专辑1', ''  union
    select 5, '歌曲6', '专辑2', ''insert into @t1
    select 1, '专辑1', '流行歌曲' union
    select 2, '专辑2', '经典歌曲' update @t
    set key1= b.key1
    from @t a, @t1 b
    where a.special = b.nameselect * from @t
    where 1 = 1
      

  4.   

    update music set music.[key]=special.[key] from music,special where  music.special=special.name
      

  5.   

    update music set music.[key]=special.[key] from music a,special  b where  a.special=b.name