程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> sqlserver 1 n-sqlserver 兩個表關聯1:n求隨機取一條數據的sql語句實現!

sqlserver 1 n-sqlserver 兩個表關聯1:n求隨機取一條數據的sql語句實現!

編輯:編程綜合問答
sqlserver 兩個表關聯1:n求隨機取一條數據的sql語句實現!

現在要補齊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
) 
pp214524253
pp214524253
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved