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|| ')( |$)');
假设单词被空格包围,你可以这样做:
select a.*
from a join
b
on ' ' || a.field1 || ' ' like '% ' || b.field1 || ' %';
这种方法和使用 regexp_substr()
的版本都不会有很好的性能。我建议您将 table b 中的单词解析为另一个 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|| ')( |$)');
假设单词被空格包围,你可以这样做:
select a.*
from a join
b
on ' ' || a.field1 || ' ' like '% ' || b.field1 || ' %';
这种方法和使用 regexp_substr()
的版本都不会有很好的性能。我建议您将 table b 中的单词解析为另一个 table,并使用简单的等值连接。