MySQL查询需求:使anon=1的用户记录返回两次
解决方案:MySQL实现特定记录重复提取
这问题我之前处理类似需求时也琢磨过,其实有几种很简洁的实现方式,给你分享两个最常用的:
方法一:UNION ALL 拆分查询
这种方式最直观,思路就是先取出所有用户的名称,再额外取出anon=1的用户名称,两者合并后就会让anon=1的记录重复一次:
SELECT name FROM users UNION ALL SELECT name FROM users WHERE anon = 1;
假设原表有3条记录,其中1条anon=1,第一次查询返回3条,第二次查询返回1条,合并后正好是4条,完美符合你的要求。
方法二:JOIN 临时数字表(扩展性更强)
如果以后需要调整重复次数(比如让anon=1的记录出现3次),这种方法改起来更方便:
SELECT u.name FROM users u JOIN (SELECT 1 AS num UNION SELECT 2) t ON u.anon = 0 OR (u.anon = 1 AND t.num <= 2);
原理是创建一个包含两行数据的临时表t,对于anon=0的用户,只关联临时表的任意一行(因为u.anon=0的条件优先满足),所以只出现一次;对于anon=1的用户,会关联临时表的全部两行,自然就重复了一次。如果要重复N次,只要把临时表扩展成N行就行。
内容的提问来源于stack exchange,提问作者user1022585
相关产品推荐
相关产品推荐

