PostgreSQL如何批量插入多组电影与演员的关联数据至关联表?
单条SQL实现批量插入电影-演员关联关系
首先纠正你原语句里的两处小问题:
- INSERT语句里的字段应该是
movie_actor表的字段,不是关联表的字段,所以应该写成INSERT INTO movie_actor (actor_id, movie_id) - WHERE条件里的
film_id是笔误,应该是movie.movie_id
接下来直接给你单条SQL批量插入的方案,核心思路是通过UNION ALL把所有电影与对应演员的映射关系组合成一个临时数据集,再关联原表完成插入:
INSERT INTO movie_actor (actor_id, movie_id) SELECT a.actor_id, m.movie_id FROM actor a -- 这里定义每部电影对应的演员ID,按需替换成你的实际数据 JOIN ( SELECT 1 AS movie_id, 201 AS actor_id UNION ALL SELECT 1 AS movie_id, 202 AS actor_id UNION ALL SELECT 2 AS movie_id, 203 AS actor_id UNION ALL SELECT 2 AS movie_id, 204 AS actor_id UNION ALL SELECT 3 AS movie_id, 205 AS actor_id UNION ALL SELECT 3 AS movie_id, 206 AS actor_id ) AS mappings ON a.actor_id = mappings.actor_id JOIN movie m ON m.movie_id = mappings.movie_id;
补充说明
- 如果你电影和演员的ID有规律(比如电影N对应演员
200+2N-1和200+2N),还可以用更简洁的生成方式,比如用数字序列生成映射,但如果对应关系是随机的,上面的UNION ALL方案最直接可靠。 - 这个语句会一次性把所有6组关联关系插入到
movie_actor表,不用重复执行多次插入语句。
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

