随机选择的数据库

时间:2011-08-10 23:29:25

标签: sql database random

我希望能够以扩展到MySQL中的大表的方式从表中随机选择行。据我所知,现在真的不可能。我还可以使用其他任何数据库吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT ColumnName 
FROM TableName
ORDER BY RAND()
LIMIT 1;

答案 1 :(得分:1)

是否需要使用SQL进行此类选择?如果没有,您可以在代码中生成一个随机数,然后通过生成的数字获得相关记录。当然,这是做出一些假设:

  • 要求您的身份证是身份种子
  • 你的随机数受min&最大值。

答案 2 :(得分:0)

我认为可以做到这一点......抱歉 - 这是TSQL,但是FWIW

Declare 
   @max int, 
   @min int, 
   @rand int

set @max = (select max(id) from myTable)
set @min = (select min(id) from myTable)
set @rand = Cast(((@max + 1) - @min) * Rand() + @min as int)

select * from myTable where id = @rand

或者如果您的主键字段存在空白,那么:

select max(id) from myTable where id <= @rand

Per @ andrew的反对意见 - 他担心这会在不匹配的比赛中支持较低的身份证号码。如果这是一个问题,你可以通过几种方式来处理它:

一次记录2条记录(最小值和最大值)。例如:

INSERT INTO whatever_table_variable_etc
select max(id) from myTable where id <= @rand
UNION
select min(id) from myTable where id >= @rand

或者你可以将它建立在赔率和平均值之上。例如:

Declare @isOdd bool
SET @isOdd= CASE WHEN ABS(@rand) % 2 = 1 THEN 1 ELSE 0 END

If @isOdd = 1
   select max(id) from myTable where id <= @rand
ELSE 
   select min(id) from myTable where id >= @rand