例如,我有两个表需要两个小输入表:-
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:-我只提供了一种情况的输出,表格会很大。也无法在列数据之间添加空格,因此使用引号。
我已经尝试使用层次结构查询来完成上述我打破字符串的操作,但这需要很多时间:- 我如何打破字符串的示例:-
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;
有人可以提出一个好的方法 -