歌曲表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语句实现或是存储过程实现
存储过程该怎么写?急求!
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语句实现或是存储过程实现
存储过程该怎么写?急求!
--测试:
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 行)
*/
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