PostgreSQL中INSERT INTO搭配SELECT插入NULL的语法问题咨询
你写的INSERT ... SELECT搭配常量NULL的写法本身符合标准SQL规范,是实现该需求的最优方案,逻辑清晰也没有额外性能损耗,出现ERROR 42601语法报错大概率是以下几个原因导致的:
- 部分数据库(比如PostgreSQL)对无类型的NULL常量解析严格,需要显式指定NULL的类型和目标表c列的类型匹配:
可以改用通用兼容所有数据库的CAST写法,比如c列是INT类型就写:
如果用的是PostgreSQL也可以用简写转型语法INSERT INTO table_2 (a, b, c) SELECT a, b, CAST(NULL AS INT) FROM table_1NULL::INT。 - 检查当前语句前后是否有语法笔误:比如前一条执行的语句未加分号结束,和当前语句拼接后被数据库识别为非法语法,或者字段列表里有遗漏的逗号、括号。
- 数据库版本过旧:极少数停更的老版本数据库不支持SELECT返回常量值,升级到官方维护的稳定版本即可解决。
如果排查完以上场景还是无法执行,可以补充你的数据库类型、版本以及table_2的表结构信息进一步定位。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

