我希望能够以扩展到MySQL中的大表的方式从表中随机选择行。据我所知,现在真的不可能。我还可以使用其他任何数据库吗?
答案 0 :(得分:1)
试试这个:
SELECT ColumnName
FROM TableName
ORDER BY RAND()
LIMIT 1;
答案 1 :(得分:1)
是否需要使用SQL进行此类选择?如果没有,您可以在代码中生成一个随机数,然后通过生成的数字获得相关记录。当然,这是做出一些假设:
答案 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