You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用返回多行的SELECT子查询向MySQL表插入数据?

解决MySQL插入时子查询返回多行的问题

错误原因

你遇到的Subquery returns more than 1 row错误,是因为VALUES子句里的子查询返回了多行结果——你的专辑Victorialand有CD和Vinyl两个符合releaseformat IN ('CD','V')条件的条目,对应的releaseid是两个,而VALUES要求子查询必须返回单行单列值。

解决方案

根据你的需求选择对应写法:

1. 给CD和Vinyl格式各插入一条相同曲目(一次性插入2条记录)

不需要拆成两个查询,用INSERT ... SELECT语法可以批量插入:

INSERT INTO tbl_track (trackname, trackno, tracklength, releaseid)
SELECT 'Fluffy Tufts', '2', 3.6, releaseid
FROM tbl_release
WHERE releasename = 'Victorialand'
  AND releaseformat IN ('CD', 'Vinyl'); -- 注意这里确保'releaseformat'的值和表中匹配,比如你原来写的'V'如果是Vinyl的缩写,就用'V'

这条语句会自动为每个符合条件的releaseid生成一条插入记录,一次完成两条数据的插入。

2. 只插入一条曲目(对应其中一个格式的releaseid)

如果只需要插入一条,就要让子查询返回单行结果,比如明确指定格式,或者用LIMIT 1:

-- 明确指定选CD格式的releaseid
INSERT INTO tbl_track (trackname, trackno, tracklength, releaseid)
VALUES('Fluffy Tufts','2',3.6,(SELECT releaseid 
                               FROM tbl_release 
                               WHERE releasename = 'Victorialand' 
                                 AND releaseformat = 'CD'
                               LIMIT 1)); -- LIMIT 1确保只返回一行,避免意外

关于拆分查询的问题

不是必须拆成两个查询,用上面的INSERT ... SELECT可以更高效地完成批量插入;如果只需要单条记录,调整子查询确保返回单行即可。

内容的提问来源于stack exchange,提问作者Joao Cerca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:42:56