Oracle sql 根据一个 table 包含另一个 table 字段中的词的 tables

Oracle sql Join tables based on one table containing the word in the field of another table

我正在尝试按如下方式将两个 table 连接在一起。

Table A        Table B
Field1         Field1
GO             GO
FOREGO
OK GO

我只想加入 table A 中的字段 1 与 table B 中的单词完全相同,但不是另一个单词的一部分。所以GO和OK GO会加入成功,FOREGO则不允许加入。

我有预感我会使用 reg_exp 来完成连接,但我不知道如何实现。

I have a hunch that i'd use reg_exp to accomplish the join, but I can't figure out how to implement.

您可以使用 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() 的版本都不会有很好的性能。我建议您将 table b 中的单词解析为另一个 table,并使用简单的等值连接。