如何使用返回多行的子查询向company_details表插入数据?
解决多行子查询的INSERT问题
你的错误原因是:使用VALUES子句时,嵌套的子查询返回了多行结果,但VALUES搭配单个子查询表达式时只能处理单行数据,因此触发了Subquery returned more than 1 value的错误。
正确的写法是直接使用INSERT INTO ... SELECT ...语法,不需要VALUES子句,这样可以直接将子查询返回的多行数据批量插入,同时指定固定的detail_found值:
INSERT INTO company_details (company_id, detail_found) SELECT company_id, 'No data found' FROM company_list WHERE company_id NOT IN (SELECT company_id FROM company_details);
更稳妥的写法(避免NULL值问题)
如果company_details表的company_id存在NULL值,NOT IN会返回异常结果,此时推荐使用NOT EXISTS替代:
INSERT INTO company_details (company_id, detail_found) SELECT cl.company_id, 'No data found' FROM company_list cl WHERE NOT EXISTS ( SELECT 1 FROM company_details cd WHERE cd.company_id = cl.company_id );
内容的提问来源于stack exchange,提问作者Sidath
相关产品推荐
相关产品推荐

