表T1:
ID C1 C2 C3 (实际上C1-C10 10个字段)
1 A B C
2 A B
3 B A
4 A
给定N个不定长字符(N<=3), 例(’A’, ‘B’),要求取出表T1中
有且只有(’A’,’B’)的纪录结果为:
2 A B
3 B A
ID C1 C2 C3 (实际上C1-C10 10个字段)
1 A B C
2 A B
3 B A
4 A
给定N个不定长字符(N<=3), 例(’A’, ‘B’),要求取出表T1中
有且只有(’A’,’B’)的纪录结果为:
2 A B
3 B A
解决方案 »
- oracle
- 求一个sql优化
- 问下用户间互相访问
- 我在Oracle中写了一个系统级触发器,不成功,现在都登录不进去了?急
- 请问 "ORA-01536:space quota exceeded for tablespace 'POST_INDX'"是表示什么,如何解决问题?急!
- 在linux下使用的一些问题
- 连接因对象主机或对象不存在而失败 这是为什么?
- 和9i连接的问题!!
- ORACLE的触发器如何调用存储过程!急!
- 气死我了!!!为什么我的Oracle9i就是装不上呢??
- 视图与表嵌套的查询的效率问题,原理何在?
- oracle中如何用FORALL实现动态SQL的批量插入,我按书上的例子行不通
tt.c1 C1,
tt.c2 C2,
.....
tt.c10 C10
from
(
select
a.*,
a.C1||a.C2||a.C3||a.C4.....||a.C10 str --把十个字段连起来
from
tablea a
) tt
where
tt.str in ('AB','BA')
就是用substr把你的字符串分解开,再排列组合起来放在in子句里就可以了。
下面是字符串中只有两个的情况,三个的你自已补全。select * from t3 where c1||c2||c3 in (substr('AB',1,1),substr('AB',2,1),substr('AB',3,1),
substr('AB',1,1)||substr('AB',2,1),substr('AB',2,1)||substr('AB',1,1),
substr('AB',2,1)||substr('AB',3,1),substr('AB',3,1)||substr('AB',2,1),
substr('AB',1,1)||substr('AB',3,1),substr('AB',3,1)||substr('AB',1,1));
ID
C1,
C2,
.....
C10
FROM T1
WHERE
C1||C2||C3||C4||.....||C10 IN ('AB','BA')
;
如果发现这个查询比较慢
可以在t1上建一个函数索引:
CREATE INDEX INDEX_T1 ON T1(
C1||C2||C3||C4||.....||C10 ASC
);
唉。
1.不管你的程序有几个参数传进来,
----给定N个不定长字符(N<=3), 例(’A’, ‘B’),
我现在假设他们为,(’A’, ‘AB’`,‘BA’),这样,可以替你否定上面的那些人的做法。同时,我选定了一个你的数据库里面不会有的一个字符。
我用了"*",你可以用其他的。select * from T1
where length('*' || c1 || '*' || c2 || '*' || c3 || '*' || c4 || '*' || c5 || '*' || c6 || '*' || c7 || '*' || c8 || '*' || c9 || '*' || c10 || '*')=length(P1 || P2 || P3) + 11
and instr('*' || c1 || '*' || c2 || '*' || c3 || '*' || c4 || '*' || c5 || '*' || c6 || '*' || c7 || '*' || c8 || '*' || c9 || '*' || c10 || '*', '*' || P1 || '*') > 0
and instr('*' || c1 || '*' || c2 || '*' || c3 || '*' || c4 || '*' || c5 || '*' || c6 || '*' || c7 || '*' || c8 || '*' || c9 || '*' || c10 || '*', '*' || P2 || '*') > 0
and instr('*' || c1 || '*' || c2 || '*' || c3 || '*' || c4 || '*' || c5 || '*' || c6 || '*' || c7 || '*' || c8 || '*' || c9 || '*' || c10 || '*', '*' || P3 || '*') > 0
多谢!