使用子查询同步age_range主键至library_usage表时遇SQL类型匹配错误
PostgreSQL UPDATE子查询数据类型不匹配问题解决
你的SQL语句执行时出现类型不匹配错误,根源是library_usage.agerange(字符型character varying)和subquery.pk_age_range(整数型integer)无法直接用=做比较。
原SQL代码:
update library_usage set fk_agerange = subquery.pk_age_range from (select pk_age_range, agerange from age_range) as subquery where library_usage.agerange = subquery.pk_age_range
错误信息:
SQL Error [42883]: ERROR: operator does not exist: character varying = integer
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.
解决方案
根据实际数据情况选择以下两种类型转换方式:
将整数型主键转为字符型
把subquery.pk_age_range转换为varchar,匹配library_usage.agerange的类型:update library_usage set fk_agerange = subquery.pk_age_range from (select pk_age_range, agerange from age_range) as subquery where library_usage.agerange = subquery.pk_age_range::varchar将字符型字段转为整数型
若library_usage.agerange的所有值都是可转换为整数的字符串,可将其转为integer匹配主键类型:update library_usage set fk_agerange = subquery.pk_age_range from (select pk_age_range, agerange from age_range) as subquery where library_usage.agerange::integer = subquery.pk_age_range
注意事项
- 使用第二种方案前,务必确认
library_usage.agerange中没有非数值内容,否则会触发转换失败的错误。 - 检查
library_usage.fk_agerange的字段类型,确保它和age_range.pk_age_range(整数型)一致,避免赋值时再次出现类型不匹配问题。
内容的提问来源于stack exchange,提问作者flourr boi
相关产品推荐
相关产品推荐

