現在要補齊tb1中演唱歌曲字段。條件是去tb2中查找相同藝人演唱過的歌曲,隨機填充到tb1中的歌曲名字段
一個歌手不止演唱一首歌,所以tb2中是藝人演唱所有歌曲的集合。tb1中同一個歌手可能出現好幾次
補齊時候需根據tb1中藝人名稱去tb2也就是藝人歌曲匯總表中查找相同藝人演唱的歌曲名稱。
需要在藝人名相同情況下隨機取tb2中演唱歌曲名去一一補齊tb1中的字段 tb1
tb1
藝人 演唱歌曲名
a null
b null
c null
a null
s null
d null
e null
tb2
藝人 演唱歌曲名
a aa
a ab
b bb
b ba
b bbb
d dd
d d2
f ddd
c cc
藝人 演唱歌曲名稱
a aa (tb1中的藝人名會出現好幾次每次在tb2中,只要隨機的一條來填充)
a ab
b bb
d dd
c cc
基於上回表結構的隨機填寫,這比上次那個要簡單。再變應該也變不出這次SQL和上次SQL了,如果還有新規則,不行就兩者自己綜合一下。再寫就沒什麼意義了。
update tb1
set ycgqm=(
select bycgqm from (
select t3.id,
(--根據tb1中生成的隨機數取歌曲
select ycgqm from (
select b.*,ROW_NUMBER() OVER(PARTITION BY yr ORDER BY ycgqm) AS tnum from tb2 b
) b2 where b2.yr=t3.yr and b2.tnum = t3.rndnum
) as bycgqm
from (--根據tb1中取歌手名稱下哪首歌的行號
select t2.*,cast(ceiling(rand(checksum(newid()))*gqtotalnum) as int) as rndnum from
(
select t.*,(select count(*) from tb2 where yr=t.yr) as gqtotalnum
from tb1 t
) t2
) t3
) t4 where t4.id = tb1.id
)