字段名
user_Arr id
值
12,34,56,66 1
字段名
user_Id
值
12
34
56
select user_id from table2 where user_id in (select user_arr from table1 where id =1)
希望达到这种效果,该处理table1的字段值?
select user_id from table2 where user_id in ('12,34,56,66')
我以前做过oracle 中的 split 功能,它是通过正则表达式来进行实现的(当然你也可以写个函数来搞定)。
[quote]
select dbms_lob.substr
(regexp_substr('abc,def,ggg,1,2,3,4,5', '[^,]+', 1, x.n))
as player_guid
from dual a,
(select rownum n from dual connect by rownum < 100) x
这里利用了函数 regexp_substr和connect by
其中rownum < 100 会连接限制split的次数 '[^,]+'为split拆分的正则表达式,这里为【,】逗号。
[/quote]
lz 我没太看明白,不知道你要问什么,能否说清楚点(貌似你都写出来了)
select user_id from table2 where user_id in (select user_arr from table1 where id =1) 楼主你这句是对的啊。
你到底想问啥了。
你用的是什么数据库呢?
哦 明白了。我做过类似的,用sql不行的,我是这么做的,把第一个表的"12,34,56,66"这个字段存储成",12,34,56,66,"这样的,前后都加引号,然后呢你就用
select user_id from table2 where user_id like '%,12,34,56,66,%'
就行了。
[quote]我需要查另一个表,希望能in这张表的字段。 [/quote]
那就你上面的几个数字来说,如果你想查 34 这个,那么是不是 table1 中的两条数据都是符合要求的呢?即, 34 in ('12,34,56,66') 是成立的, 34 in ('34,56')也是成立。先别管我这么写语法正不正确。
刚说错了
然后可以用
select user_id from table2 where user_id like '%,12,34,56,66,%'
里面的user_id=","+user_id+","
那么按照我的就可以变成 类似 ",56," like '%,12,34,56,66,%'
看懂了吗
[quote]怎么把查出来的字段,变成字符串[/quote]
这么干就行
[code="java"]
select user_id||'' from table2;
[/code]
把第一个表的"12,34,56,66"这个字段存储成",12,34,56,66,"这样的,前后都加引号,然后呢你就用
[color=red]select user_id from table2 where user_id like '%,12,34,56,66,%'
user_id用程序拼接成user_id=","+user_id+","[/color]
[quote]但是数据库,还是把他识别为一个字段。不是字符串 [/quote]
没明白你说的 “把他还识别为一个字段” 是什么意思。
[code="java"]
select user_id||'' as userId from table2;
[/code]
这样子的话,查出来的 userId 的值肯定是一个字符串啊
琢磨一下我的写法。程序只需要控制把userid前后加一个逗号就行了。
ibatits 不是支持原生 sql 的吗,所以当然可以使用了啊。你要分割的数据也不多,所以,效率不会受到什么大的影响吧。
lz和ls的假如搞定了 最后分享一下啊。
oracle 的in函数使用必须和字段的类型匹配,你的user_id如果是string的话就必须写成 in ('12','22','33')
如果是int的就可以写成 in (12,22,33)
[quote]SELECT A.USER_ID
FROM TABLE2 A,
TABLE1 B
WHERE INSTR(','||B.USER_ARR||',',','|| A.USER_ID || ',') > 0
and id = '1' [/quote]
你这其实就是前后加逗号,然后看是否在里面
[quote]嗯。但是你可以试试就知道有多大区别了 [/quote]
你这个方法确实很好 :idea: