MySQL如何重复返回IN子句中多次出现条件的单行数据?
解决方案
方法1:使用UNION ALL拼接多次查询
直接把相同的查询用UNION ALL连接,因为UNION ALL不会对结果去重,所以会返回两次匹配的数据:
SELECT name FROM people WHERE age = '34' UNION ALL SELECT name FROM people WHERE age = '34';
方法2:JOIN包含重复值的临时数据集
构造一个包含重复目标值的临时表,通过JOIN关联原表,让匹配的行和临时表的每一行对应,从而得到重复结果:
SELECT p.name FROM people p JOIN (VALUES ('34'), ('34')) AS ages(val) ON p.age = ages.val;
如果需要更多重复次数,只需在VALUES里添加更多的('34')即可。
方法3:利用序列生成函数(部分数据库支持)
像PostgreSQL、SQL Server这类支持序列生成函数的数据库,可以用GENERATE_SERIES(PostgreSQL)或类似方式生成重复行,再和原表交叉连接:
-- PostgreSQL示例 SELECT p.name FROM people p CROSS JOIN GENERATE_SERIES(1, 2) WHERE p.age = '34';
内容的提问来源于stack exchange,提问作者shane
相关产品推荐
相关产品推荐

