日期:2014-05-17  浏览次数:20811 次

Oralce查询语句执行函数先后问题
本帖最后由 assoloist 于 2012-11-07 21:07:00 编辑

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 )


如上述这个SQL查询语句,字段per_dsc里面放的是人名,中间用英文逗号隔开,如:张三,李四

然后如果单执行括号里面的查询,返回结果是:'张三','李四'

如果单单执行语句:

SELECT usr_id from usertabel where usr_nam in  ('张三','李四')


返回结果是:ZHANGSAN LISI


但是连起来一次查询,就得不到任何结果。。。

是不是有执行函数先后顺序的问题呢?
------最佳解决方案--------------------
','
------其他解决方案--------------------
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 ('''张三'',''李四''');-
当然查不到结果了