Oracle sql Объединение таблиц на основе одной таблицы, содержащей слово в поле другой таблицы

Я пытаюсь объединить две таблицы следующим образом.

Table A        Table B
Field1         Field1
GO             GO
FOREGO
OK GO

Я хочу присоединиться только тогда, когда поле field1 в таблице A содержит точное слово как слово в таблице B, но не является частью другого слова. Таким образом, GO и OK GO успешно присоединятся, FOREGO не будет допущено к участию.

У меня есть догадка, что я бы использовал reg_exp, чтобы выполнить соединение, но я не могу понять, как реализовать.

2 ответа

Решение

У меня есть догадка, что я бы использовал reg_exp, чтобы выполнить соединение, но я не могу понять, как реализовать.

Вы могли бы использовать REGEXP_LIKE:

SELECT DISTINCT A.*
FROM TableA A
JOIN TAbleB B
 ON regexp_like(A.Field1, '( |^)('|| B.Field1|| ')( |$)');

DBFiddle Demo

Предполагая, что слова окружены пробелами, вы можете сделать:

select a.*
from a join
     b
     on ' ' || a.field1 || ' ' like '% ' || b.field1 || ' %';

Ни этот метод, ни версия, использующая regexp_substr() будет очень хорошая производительность. Я бы посоветовал вам разобрать слова из таблицы b в другую таблицу и использовать простое уравнение.

Другие вопросы по тегам