我正在寻找生成一个随机数,该生成的数字不存在于另一个表上。
例如:如果一个表名为randomNums
具有价值观10,20,30,40,50
.
我喜欢生成一个除上述值之外的数字。
我尝试了以下查询。
Query
;WITH CTE AS
(
SELECT FLOOR(RAND()*100) AS rn
)
SELECT rn FROM CTE
WHERE rn NOT IN (SELECT num FROM randomNums);
但有时此查询不会返回任何内容。
因为那时它会生成表中的数字randomNums
.
如何解决这个问题?
小提琴供参考 http://sqlfiddle.com/#!6/d7ce21/1
还有另一个选择,我一直喜欢NEWID()
对于随机排序,交叉连接非常有效地创建许多行:
;with cte AS (SELECT 1 n UNION ALL SELECT 1)
,cte2 AS (SELECT TOP 100 ROW_NUMBER() OVER(ORDER BY a.n) n
FROM cte a,cte b,cte c,cte d, cte e, cte f, cte g)
SELECT TOP 1 n
FROM cte2 a
WHERE NOT EXISTS (SELECT 1
FROM randomNums b
WHERE a.n = b.num)
ORDER BY NEWID()
Demo: SQL小提琴 http://www.sqlfiddle.com/#!3/faeec/9/0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)