基于多ID批量插入多行SQL数据:每个用户ID插入3条订阅记录
解决方案:批量为每个用户ID插入3条订阅记录
没问题,我来帮你搞定这个批量插入的逻辑!核心思路是把用户ID列表和你需要的3组订阅/翻译数据做交叉连接,这样每个ID会自动和3组数据配对,一次性生成所有要插入的记录。
具体SQL语句
INSERT INTO subscriptions(id_account, subscription, translation) SELECT ids.id_account, subs.subscription, subs.translation FROM unnest('{123,456,789}'::int[]) AS ids(id_account) CROSS JOIN ( VALUES ('subscription1', 'translation1'), ('subscription2', 'translation2'), ('subscription3', 'translation3') ) AS subs(subscription, translation);
语句拆解说明
unnest('{123,456,789}'::int[]) AS ids(id_account):把你硬编码的用户ID数组转换成行数据,相当于生成一个临时的用户ID列表。VALUES (...) AS subs(subscription, translation):用更简洁的方式定义你需要的3组订阅+翻译组合,比多次UNION ALL拼接可读性强很多。CROSS JOIN:将每个用户ID和每一组订阅数据配对,自动为每个ID生成3条不同的订阅记录,完美匹配你的需求。
扩展场景适配
如果你的用户ID不是硬编码数组,而是来自其他表(比如accounts表),只需要替换掉unnest部分的查询即可:
INSERT INTO subscriptions(id_account, subscription, translation) SELECT a.id_account, subs.subscription, subs.translation FROM accounts a CROSS JOIN ( VALUES ('subscription1', 'translation1'), ('subscription2', 'translation2'), ('subscription3', 'translation3') ) AS subs(subscription, translation);
这样就能高效完成批量插入啦!
内容的提问来源于stack exchange,提问作者Shaonline
相关产品推荐
相关产品推荐

