如何从另一张表查询数据插入目标表 处理数据类型不匹配问题
问题原因
这个报错的核心是两张表的列顺序不一致:你使用SELECT *做插入时,数据库会按字段位置而非字段名匹配,导致transaction表中顺序靠后的日期类型字段,被映射到了transactionp表靠前的balance(u_money类型)字段,触发类型不匹配错误。
解决方法
方案1(最稳妥,推荐):显式指定插入和查询的字段名
直接在INSERT和SELECT语句中对应列明,不管表结构顺序怎么变都不会出错,示例如下(把示例字段替换成你两张表实际的公共字段即可):
INSERT INTO transactionp (id, posting_date, amount, balance, remark, create_time) SELECT id, posting_date, amount, balance, remark, create_time FROM transaction WHERE posting_date > '2021-08-17';
方案2(仅临时验证用,不推荐):调整SELECT的字段顺序
如果你确认两张表的字段完全一致只是顺序不同,可以先查transactionp的字段顺序,再调整SELECT后面的字段顺序和它完全对齐即可,但这种方式后续表结构调整很容易再次出错。
方案3(特殊场景用):显式做类型转换
如果确实存在字段类型需要转换的场景,可以用CAST函数做强制转换,示例:
-- 仅示例,你当前的场景不需要用这个方案 CAST(your_datetime_column AS u_money)
注意事项
永远不要依赖SELECT *做跨表插入,隐式的字段位置匹配风险极高,显式指定字段名是SQL书写的最佳实践。
内容的提问来源于stack exchange,提问作者John Nnamaka
相关产品推荐
相关产品推荐

