如何在MySQL中随机获取两个指定数值中的一个?
解决MySQL中随机选择指定两个值的问题
嘿,我明白你的困扰了——谷歌搜出来的都是生成范围随机数的方法,但你要的是从固定的两个值(429和529)里随机选一个,对吧?你的原语句里用RAND(SELECT 429 UNION SELECT 529)是不对的,因为MySQL的RAND()函数参数是随机种子,不是可选值列表。下面给你两种靠谱的解决方案:
方法一:用子查询+随机排序
这种方法直观易懂,先生成包含两个目标值的临时表,再随机排序取第一个:
INSERT INTO table1(table2_id, status, stage, added_by) SELECT id, 'Pending', 'Semifinal', (SELECT val FROM (SELECT 429 AS val UNION SELECT 529) t ORDER BY RAND() LIMIT 1) FROM table2;
内层的(SELECT 429 AS val UNION SELECT 529)会创建一个只有两行的临时表,ORDER BY RAND()打乱顺序后取第一行,这样每插入一行数据都会随机选中429或529中的一个。
方法二:用ELT()函数(更高效)
如果追求性能,推荐用ELT()结合RAND(),不需要子查询,执行更快:
INSERT INTO table1(table2_id, status, stage, added_by) SELECT id, 'Pending', 'Semifinal', ELT(FLOOR(RAND() * 2) + 1, 429, 529) FROM table2;
原理很简单:FLOOR(RAND() * 2)会生成0或1,加1后变成1或2;ELT(n, val1, val2)函数会返回第n个参数的值,所以当n=1时返回429,n=2时返回529,完美实现随机二选一。
如果你的需求不是随机,而是固定选其中一个值,那直接把added_by的值写死成429或529就行啦。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

