MySQL 5.7如何无需全局变量和存储过程合并两组随机插入查询?
在MySQL 5.7中合并两个插入查询的方案
可以通过UNION ALL将两个SELECT语句的结果合并,然后一次性插入目标表,无需全局变量或存储过程,具体写法如下:
define p1_id, p2_id int; ... INSERT INTO Cards_in_game_decks SELECT * FROM Cards_in_decks WHERE player_id = p1_id ORDER BY RAND() LIMIT 10 UNION ALL SELECT * FROM Cards_in_decks WHERE player_id = p2_id ORDER BY RAND() LIMIT 10;
关键说明
- 选用
UNION ALL而非UNION:因为两个子查询分别对应不同的player_id,结果集不会有重复数据,UNION ALL无需执行去重操作,性能更优。 - 子查询独立随机取数:每个
SELECT都单独使用ORDER BY RAND() LIMIT 10,保证从每个玩家的卡片中随机选取10条,完全匹配原逻辑。 - 无额外依赖:全程不需要全局变量、存储过程或其他复杂对象,仅通过SQL语句组合完成需求。
内容的提问来源于stack exchange,提问作者gosvoh
相关产品推荐
相关产品推荐

