如何解决INSERT插入时子查询返回多行错误 批量插入全门店指定影片库存
报错原因
你编写的SQL报错是因为VALUES子句要求每个位置的表达式仅返回单行值,但(SELECT store_id from store)子查询返回了全部门店的多行store_id,无法匹配单行插入的逻辑。
正确写法
采用INSERT INTO ... SELECT语法直接批量生成插入数据,不需要使用VALUES子句:
INSERT INTO inventory (film_id, store_id) SELECT (SELECT film_id FROM film WHERE title = 'EUCLIDEAN PI'), store_id FROM store;
语法说明
- 该写法会遍历
store表的所有有效store_id,每一条store记录都会自动匹配固定的EUCLIDEAN PI对应的film_id,自动生成N条库存记录(N为门店总数) - 无需关注store_id是否连续递增,所有store表中存在的门店都会完成库存插入
- 如果
film表的title字段没有唯一约束,为避免重名影片导致子查询返回多行报错,可以给film查询加上LIMIT 1:
INSERT INTO inventory (film_id, store_id) SELECT (SELECT film_id FROM film WHERE title = 'EUCLIDEAN PI' LIMIT 1), store_id FROM store;
内容的提问来源于stack exchange,提问作者INeedHelp101
相关产品推荐
相关产品推荐

