oracle in (select a from table)

问题语句:
select SUBJECTCODE,subjectname,supercode from BO_CW_SUBJECT where supercode in (select SUBJECTCODE from BO_FLOW_SUBJECT_S where FLOWINSTANCEID=28273)

解析:
(select SUBJECTCODE from BO_FLOW_SUBJECT_S where FLOWINSTANCEID=28273) 此语句的结果集为 31,32,怎样才能与上面一条sql语句结合起来使用呢

谢谢!

上正则表达式好些?

[code="sql"]
SELECT
t1.SUBJECTCODE,
t1.subjectname,
t1supercode
FROM
BO_CW_SUBJECT t1,
BO_FLOW_SUBJECT_S t2
WHERE
t2.FLOWINSTANCEID=28273
AND regexp_like(t2.SUBJECTCODE, '(^|,)' || t1.supercode || '(,|$)')
[/code]
未测试

这种做法会有效率问题的。一定是全表走查的。

[code="java"]select t1.SUBJECTCODE,t1.subjectname,t1supercode from BO_CW_SUBJECT t1,BO_FLOW_SUBJECT_S t2 where t2.FLOWINSTANCEID=28273 and t1.supercode = t2.SUBJECTCODE[/code]

问题好生奇怪耶!

1分两条sql可能更快
1、取(select SUBJECTCODE from BO_FLOW_SUBJECT_S where FLOWINSTANCEID=28273) 然后程序中split
2、再in查一次 效率高
select SUBJECTCODE,subjectname,supercode from BO_CW_SUBJECT where supercode in(?,?)

2、like 缺点不走索引
where concat(supercode, ',' , '%') like (子查询) or concat(',', supercode, '%') like (子查询)

既因为你的格式是 1,2,3 所以两种情况 1, ,3 如果你存储的格式是1,2,3, 则可以直接1, 2, 3, 匹配

可以用exists啊