问题描述
我有一个锻炼应用程序,用于在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