如何用单条SELECT语句重复返回结果并仅修改email字段
解决方案
用UNION ALL拼接(简单直接)
把原查询复制一份,分别指定不同的email值,通过UNION ALL合并两个结果集,就能让每条符合条件的数据对应两个邮箱:
SELECT *, 'myemail_1@gmail.com' AS email FROM my_table WHERE field1 = 1 AND field2 = 2 LIMIT 200 UNION ALL SELECT *, 'myemail_2@gmail.com' AS email FROM my_table WHERE field1 = 1 AND field2 = 2 LIMIT 200;
用CROSS JOIN关联邮箱列表(扩展性更好)
如果之后要加更多邮箱,这个方法更省心。先构造一个包含目标邮箱的临时集合,再和原查询的结果做交叉连接,自动给每条数据匹配所有邮箱:
SELECT t.*, e.email FROM ( -- 先获取符合条件的原始数据,限制200条 SELECT * FROM my_table WHERE field1 = 1 AND field2 = 2 LIMIT 200 ) t -- 交叉连接邮箱列表 CROSS JOIN ( SELECT 'myemail_1@gmail.com' AS email UNION ALL SELECT 'myemail_2@gmail.com' AS email ) e;
两种方法的区别:第一种适合只有两个邮箱的场景,写起来直观快捷;第二种不用重复编写原查询的过滤和限制逻辑,后续新增邮箱只需要在子查询里加一行即可,维护成本更低。
内容的提问来源于stack exchange,提问作者Macbernie
相关产品推荐
相关产品推荐

