MySQL跨表带条件插入双值报错:Operand should contain 1 column(s)
解决INSERT语句中
Operand should contain 1 column(s)错误 兄弟,你这个报错的原因太清晰了——你的子查询返回了两列数据(secty_cd和COUNT(*)),但你要插入的number_records字段只需要一个值,数据库直接懵圈:到底该拿哪一列填进去啊!
先看你的原SQL:
INSERT INTO animate_2 (number_records, type) VALUES ((SELECT secty_cd, COUNT(*) FROM securities WHERE secty_cd = 'EQS' ), 'eqs' );
这里的子查询(SELECT secty_cd, COUNT(*) ...)返回了两列结果,但VALUES里对应的第一个位置只对应animate_2表的number_records字段,一个位置只能接收单个值,这就触发了ERROR 1241 (21000)。
你单独执行子查询正常,是因为子查询本身语法没问题,只是放到INSERT的场景下,列数和目标字段不匹配了而已。
给你两种针对性的解决办法:
办法一:只插入统计数量
如果你只需要把COUNT(*)的结果存入number_records,那把子查询里的secty_cd去掉就行:
INSERT INTO animate_2 (number_records, type) VALUES ((SELECT COUNT(*) FROM securities WHERE secty_cd = 'EQS' ), 'eqs' );
办法二:同时插入多列数据
如果你的animate_2表还有对应secty_cd的字段(比如叫secty_code),想要一次性插入secty_cd、统计数和类型,那可以直接用SELECT语句作为插入源,写法更简洁:
INSERT INTO animate_2 (secty_code, number_records, type) SELECT secty_cd, COUNT(*), 'eqs' FROM securities WHERE secty_cd = 'EQS';
内容的提问来源于stack exchange,提问作者Philipp M
相关产品推荐
相关产品推荐

