对于此处的示例,我们将使用表 NAMES,我需要返回 3 行。
id | 姓名 |
---|---|
1 | 阿尔法 |
2 | 测试版 |
3 | 池 |
4 | 三角洲 |
5 | 小量 |
我知道代码
SELECT * FROM names ORDER BY RAND() LIMIT 3;
将返回 3 个随机行。但它完全是三个不同的行。
有没有办法在一个查询中得到三行互不影响,从而允许重复?所以结果可能是 Beta、Alpha、Delta。或 Beta、Epsilon、Beta,甚至 Beta、Beta、Beta。
尝试通过使用
union all
拼接在一起的独立子查询来实现这一点
SELECT * FROM (SELECT id, name FROM names ORDER BY RAND() LIMIT 1) d
UNION ALL
SELECT * FROM (SELECT id, name FROM names ORDER BY RAND() LIMIT 1) d
UNION ALL
SELECT * FROM (SELECT id, name FROM names ORDER BY RAND() LIMIT 1) d
注意:我建议你不要仅仅依赖“select *”,指定你需要的列。
尝试在这里多次运行它(使用 Postgres):https://dbfiddle.uk/IwNV0z34