SELECT usr_id from usertabel where usr_nam in ('张三','李四') 后面in 是这样,是个集合: select name from(select '张三' name from dual union all select '李四' from dual ) 而不是 select '张三,李四' from dual
SELECT usr_id from usertabel where usr_nam in (select chr(39)||replace(per_dsc,',',chr(39)||','||chr(39))||chr(39) FROM datatable where pkvalue=1088 ) 相当于 SELECT usr_id from usertabel where usr_nam in ('''张三'',''李四''');- 当然查不到结果了
select * from a where name in ('张三','李四') 跟 select * from a where name in (select '''张三'',''李四''' from dual) 不是同一意思的 in 里面如果是select语句,配对是select语句出来的每条记录,一条记录相当于in ('张三','李四')方式里的张三,所以如果你的select语句如果出来两条记录,分别是张三和李四,那么才跟in ('张三','李四')等效,而你的语句只出来一条张三,李四合成的记录,会当成一条记录去配对的,所以配不上,结果不对。
后面in
是这样,是个集合:
select name from(select '张三' name from dual union all
select '李四' from dual )
而不是 select '张三,李四' from dual
相当于
SELECT usr_id from usertabel where usr_nam in ('''张三'',''李四''');-
当然查不到结果了
不是的,replace(per_dsc,',',chr(39)||','||chr(39))相当于把中间的逗号换成 ','
然后再加上replace函数的前后两个chr(39),得出结果是'张三','李四'
跟
select * from a where name in (select '''张三'',''李四''' from dual)
不是同一意思的
in 里面如果是select语句,配对是select语句出来的每条记录,一条记录相当于in ('张三','李四')方式里的张三,所以如果你的select语句如果出来两条记录,分别是张三和李四,那么才跟in ('张三','李四')等效,而你的语句只出来一条张三,李四合成的记录,会当成一条记录去配对的,所以配不上,结果不对。