如何插入临时表中目标表不存在的记录并解决列数不匹配报错
问题修复方案
报错核心原因:
SELECT *会返回LEFT JOIN操作两侧临时表、目标表的所有字段,返回的总字段数是两个表字段数之和,和待插入的目标表字段数不匹配,因此触发报错。
快速修复方法
直接将查询语句的SELECT *修改为SELECT t.*,仅指定返回临时表的所有字段即可。你创建tmp临时表时完全复制了saireco.employee的表结构,字段顺序、类型完全匹配,可直接插入目标表。
修改后的SQL代码:
INSERT INTO saireco.employee SELECT t.* FROM tmp t LEFT JOIN saireco.employee e USING ("employeeID") WHERE e."employeeID" IS NULL;
更优实现方案
推荐改用NOT EXISTS语法完成相同逻辑的插入,该写法不需要处理JOIN带来的冗余字段问题,且employeeID有索引的情况下执行效率更高:
INSERT INTO saireco.employee SELECT * FROM tmp t WHERE NOT EXISTS ( SELECT 1 FROM saireco.employee e WHERE e."employeeID" = t."employeeID" );
内容的提问来源于stack exchange,提问作者Orandasoft
相关产品推荐
相关产品推荐

