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|| ')( |$)');
Предполагая, что слова окружены пробелами, вы можете сделать:
select a.*
from a join
b
on ' ' || a.field1 || ' ' like '% ' || b.field1 || ' %';
Ни этот метод, ни версия, использующая regexp_substr()
будет очень хорошая производительность. Я бы посоветовал вам разобрать слова из таблицы b в другую таблицу и использовать простое уравнение.