表 A (歌手出現多行) 關聯表 B (歌手所有歌曲),為 A 每行隨機填充 B 中該歌手的一首歌。
UPDATE a
SET a.SongName = b.SongName
FROM tb1 a
CROSS APPLY (
SELECT TOP 1 SongName
FROM tb2
WHERE Singer = a.Singer
ORDER BY NEWID() -- 隨機
) b;
CROSS APPLY 為 A 每行執行子查詢,返回單行結果。ORDER BY NEWID() 實現隨機 (SQL Server 特有)。ORDER BY RAND() / ORDER BY RANDOM()。若 B 表極大,NEWID() 全表掃描慢。可預先為 B 表添加 RandomKey 列 (隨機浮點數),建立索引,查詢時 WHERE RandomKey > RAND() ORDER BY RandomKey LIMIT 1。