-5

以下を理解するために、いくつかの疑似ロジックを考え出そうとしています。

約10万件のレコードを持つテーブルがあります

主キーは、次のような ID です。

ID, col1, col2, col3

A3242X,,,
B323X,,,
A3242Y,,,
Y32YXX,,,

A3242XABC123これで、andY32と ... と ...などのユーザー入力ができました 。

私の出力は、テーブル内の ID が入力値のいずれかで始まる、または入力値のいずれかが Id テーブル内の任意の値で始まるテーブル内のすべてのレコードを把握することです。

この場合、出力は次のようになります。

A3242X  (ID A3242XABC123 begins with this)     and 

Y32YXX  (the input Y32 begins with this).  

私の考えでは、入力値をループして比較し、最後から文字を減算します....など

search_var=A3242XABC123;

Loop

  select id from table where value = search_var;

  if found exit;

  search_var = substr(search_var, 0,length(search_var-1));

end;

-- 基本的に、値が見つかるまでループします。

-- 2番目のシナリオでは、次のようなことができると思います

search_var[1] = A3242XABC123;

search_var[2] = Y32YXX;

for i = 1 to 2 loop

select id from table where id begins search_var;

add id to result array;

end;

これを行う効率的な方法を探しています。ほとんどの場合、ユーザーはおそらく数十の ID しか入力しません。

4

1 に答える 1

0

配列を忘れて、変数をテーブルに入れます。次に、次のようなことができます。

select *
from t cross join
     vars
     on t.id like concat(vars.val, '%') or
        vars.val like concat(t.id, '%')

SQL Server では、次のこともできます。

with vars as (select 'var1' as val union all
              select 'var2' as val union all
              . . . 
             )
select *
from t cross join
     vars
     on t.id like vars.val + '%' or
        vars.val like t.id + '%'
于 2013-02-20T20:47:34.260 に答える