如果没有足够的行,则用rand进行SQL顺序填充,结果重复

问题描述

我有一个锻炼应用程序,用于在20、40、60(LIMIT 20..40..60)中运行测试的语言。 如果LIMIT超出所选主题中的行,如何用重复项填充结果?

表:主题“烹饪”只有18行

让我们说“从主题= rand()限制40的烹饪顺序的表中选择

如何通过重复填充结果,以便即使没有足够的行,结果也可以有40行?

table
--------------------------------------
rice
chair
spoon
knife
fork

wanted output - select * order by rand() limit 10
------------------------------------------
chair,rice,spoon,chair,knife,fork,fork 
-------------------
// forced 10 terms

解决方法

这可能在应用程序中更好。但是如果需要的话,您可以乘以行数,然后排序并加上limit

select t.*
from t cross join
     (select 1 as n union all select 2 union all select 3 . . . 
      select 40
     ) n
where t.topic = 'Cooking'
order by n.n,rand()
limit 40;

如果您知道where子句有一定的最小值,则在临时表中可能不需要40行。

,
    SELECT * FROM
((SELECT *,1 sortby FROM dictionary where topic='Describing weather' order by rand())
UNION ALL 
(SELECT *,2 sortby FROM dictionary where topic='Describing weather' order by rand())
)dum 
ORDER BY sortby