たとえば、2 つの小さな入力テーブルを使用する 2 つのテーブルがあります。
Table1:-
columnA
man got wounded by dog
joe met sally
Table2:-
ColumnB
life is good
dog man got hunt
dumb man wounded iron
columnA の行、columnB の行を検索したいのですが、例:-
Intermediate Output of above table should be:-
ColumnA ColumnB words_matching number_of_words
"man got wounded by dog" "dumb man wounded iron" "man,wounded" 2
"man got wounded by dog" "dog man got hunt" "dog,man,got" 3
最終結果の出力で、私は表示したい:-
ColumnA ColumnB words_matching number_of_words
"man got wounded by dog" "dog man got hunt" "dog,man,got" 3
PS:- 1 つのケースのみの出力を提供しました。テーブルは巨大になります。また、列データ間にスペースを追加できなかったため、引用符を使用しました。
上記の階層クエリを使用して文字列を分割しようとしましたが、多くの時間がかかります:- 文字列を分割する方法の例:-
select column1,regexp_substr(column1,'[^ ]+', 1, level) break_1 from table1
connect by regexp_substr(column1,'[^ ]+', 1, level) is not null;
以下は私が思いついた別のクエリですが、デカルト結合のためにパフォーマンスが非常に低いため、巨大なデータには良い考えではないと思います:
select st1,st2,
max(round((extractvalue(dbms_xmlgen.getxmltype('select cardinality (
sys.dbms_debug_vc2coll(''' || replace(replace(lower(st1),''''), ' ', ''',''' ) || ''') multiset intersect
sys.dbms_debug_vc2coll('''||replace(replace(lower(st2),''''), ' ', ''',''' )||''')) x from dual'), '//text()')),2)) seq
from (
select l1.column1 st1,l2.column2 st2
from
table1 l1,table2 l2 ) group by st1,st2;
誰かが良いアプローチを提案できますか--