select * from user where user_id in (select field from table_a where id = 1);
因为你的field 和user_id 类型不一致
你试试下面的可以不
select * from user where user_id in '('+(select field from table_a where id = 1)+')';
select * from user
where
INSTR( (select ',' || field || ',' from table_a where id = 1), ',' || TRIM(TO_CHAR(user_id )) || ',' ) > 0
对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作;
两个类型不匹配的值进行比较操作(例如,“=”);
to_number函数中的值,非数字的,比如,to_number('a')肯定是不行的,
to_number('12306')则是正常的。
要避免这些问题,要做到在写sql语句时就好认真处理好不同类型的问题。
比如如果要比较的话,同时都用to_number强制转换(to_number(字段a) = to_number(字段b)。
或者同时转换为字符串类型。
在语句中使用to_number函数时,要保证值一定是数字格式,或者写好异常处理。
当我们碰到这个错误提示时,就从所有用到的数字类型的字段开始检查,逐一排查,从而解决问题。
select * from user where user_id in (select to_char(field) from table_a where id = 1);
这个错误是因为用数字类型匹配字符串类型,转换成相同类型就可以了
参考oracle 函数 to_char() to_number()
非常好,网上找了一圈这个 where 字段 in 01722无效数字 关键字 这个回答正中要害,解决问题