表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

解决方案 »

  1.   

    select 
        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')
      

  2.   

    你的字符串最好是型如: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));
      

  3.   

    SELECT 
        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
    );
      

  4.   

    怎么又是这个问题呢?
    唉。
    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
      

  5.   

    to Croatia(Croatia) :
    多谢!