我需要从SQL Server数据库中的一组行中获取一个随机行。
这是我目前运行的查询:
SELECT TOP 1 *
FROM
(SELECT * FROM Flowers WHERE Color = 'Red') a
ORDER BY NEWID()
据我了解,这应该取红色的所有鲜花。然后从其中一个选择随机花。但在我看来,它只从相当少的条目中选择,因为我经常看到同样的花。
所以现在我想知道我的查询是否不如我想的那样有效,有没有人看到它的问题?
答案 0 :(得分:1)
您不必使用子查询,只需使用where子句直接从表中选择,并使用newid()进行排序。类似......
SELECT TOP 1 *
FROM Flowers
WHERE Color = 'Red'
ORDER BY NEWID()
答案 1 :(得分:1)
众所周知,ORDER BY NEWID()
不能很好地随机化。您可以使用ORDER BY CHECKSUM(NEWID())
获得更好的结果。