使用Insert select从其他表取数插入后查询报错关系不存在如何解决
问题修复方案
1 语法错误排查
你写的SQL存在两个明显错误:
INSERT INTO后缺失目标表名,标准插入查询语法如下:INSERT INTO 目标表名 (column1, column2, column3) SELECT column1, column2, column3 FROM 源表名;- 你直接使用了
table作为源表名查询:table是所有主流SQL数据库的保留关键字,不能直接作为普通表名使用。如果你的源表实际名称就是table,需要根据你用的数据库加转义符:MySQL用反引号包裹`table`,PostgreSQL/类Oracle数据库用双引号包裹"table"。
你看到的第二条语句报错,本质是第一条语句语法错误导致执行上下文异常,或者源表名没有转义/拼写错误导致的。
2 插入同时返回数据的最优写法
不需要分开写两条语句,大多数数据库都支持直接在INSERT语句末尾返回插入的数据,避免重复查询:
PostgreSQL、Oracle、SQLite 3.35.0+ 版本
直接用RETURNING子句即可返回指定的插入字段:
INSERT INTO 你的目标表名 (column1, column2, column3) SELECT column1, column2, column3 FROM 你的源表名 RETURNING column1, column2, column3;
MySQL版本
MySQL暂不支持RETURNING语法,建议先单独执行SELECT语句确认待插入数据,确认无误后再执行插入操作:
-- 先执行这行确认待插入数据符合预期 SELECT column1, column2, column3 FROM 你的源表名; -- 确认后执行插入 INSERT INTO 你的目标表名 (column1, column2, column3) SELECT column1, column2, column3 FROM 你的源表名;
3 注意事项
- 不要用SQL保留关键字作为表名、字段名,能避免绝大多数不必要的语法错误
- 执行插入查询前,建议先单独跑一遍SELECT子句,确认返回的数据格式、数量符合预期,避免误插入脏数据
内容的提问来源于stack exchange,提问作者Alejandro Lorenzo Ocaña
相关产品推荐
相关产品推荐

