Присоединяйтесь к 2 таблицам, используя лайк и получите только первую запись - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть SQL-запрос Oracle, как показано ниже, и я хочу извлечь только одно имя, совпадающее с таблицей t2. Я получаю записи, используя запрос, но это говорит много времени, так как у меня более 40 миллионов имен в t1 и0,02 миллиона в таблице t2.

данные t1 для столбца col1:

N Wind Pudding Dr
Hasty Pudding Ln
Banana Pudding on the Go
Saint Barbaras R C Church
St Barbaras Rd

данные t2 для столбца col1:

Pudding
Barbaras

Запрос:

select t2.col1,t1.col1
from t1, t2
where t1.col1 like '% t2.col1 %';

вывод будет:

Pudding       N Wind Pudding Dr
Barbaras      Saint Barbaras R C Church

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Еще несколько опций, которые выбирают любую t1 строку таблицы, которая соответствует t2 значению столбца.

Один:

SQL> select max(t1.col), t2.col
  2  from t1 join t2 on instr(t1.col, t2.col) > 0
  3  group by t2.col;

MAX(T1.COL)                              COL
---------------------------------------- ----------
St Barbaras Rd                           Barbaras
N Wind Pudding Dr                        Pudding

Два:

SQL> select t1_col, t2_col
  2  from (select t1.col t1_col,
  3               t2.col t2_col,
  4               row_number() over (partition by t2.col order by null) rn
  5        from t1 join t2 on instr(t1.col, t2.col) > 0
  6       )
  7  where rn = 1;

T1_COL                                   T2_COL
---------------------------------------- ----------
Saint Barbaras R C Church                Barbaras
N Wind Pudding Dr                        Pudding

SQL>
0 голосов
/ 05 декабря 2018

Попробуйте что-нибудь с индексом CONTEXT

CREATE INDEX text_indx  ON t1(col1) INDEXTYPE IS CTXSYS.CTXCAT;

SELECT t2.col1,t1.col1
  FROM t1, t2
 WHERE CONTAINS(t1.col1, t2.col1) > 0;
0 голосов
/ 05 декабря 2018

Не проверено:

select t2.col1,
       (select t1.col1 from t1
        where t1.col1 like '%' || t2.col1 || '%''
        fetch first 1 row only)
from t2

Возможно, не самый эффективный способ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...