我有以下记录
主字符串
abc,def,ghi,jkl,mno
记录
abc,ghi,xyz
bbb,jkl
abc,ghi,mno
bbb,ggg
每个记录都是来自另一个查询的连接字段。 (第一条记录是“ abc”,“ ghi”和“ xyz”的串联)。
从上面,我应该确认字符串中的字段是否包含与主字符串的匹配项。在这种情况下,前三个记录是匹配的,因为它们每个都有至少一个与主字符串匹配的字段。
是否可以使用单个查询来处理此问题?我能想到的唯一方法是将每个记录分解成各个部分并分别进行匹配,但我希望有一个更有效的解决方案。我似乎也不能使正则表达式与此一起工作。
答案 0 :(得分:0)
您需要重新绑定master
字符串。幸运的是,您无需触摸record
记录。
此解决方案部署正则表达式将主字符串拆分为令牌。这些交叉连接到令牌。我们使用instr()
来查看令牌是否存在于记录的字符串中,并将结果汇总以产生一个记录,每个record
带有Y / N标志。
with m as (
select regexp_substr(str,'[^,]+', 1, level) as tkn
from master_t
connect by level <= regexp_count(str, ',')+1
)
select r.str
, max(case when instr(r.str, m.tkn) > 0 then 'Y' else 'N' end) as in_str
from m
cross join record_t r
group by r.str
/
显然,此解决方案假定您正在处理表。关于您的数据结构,这个问题有点含糊。希望您可以将此答案应用于自己的情况,但是如果您需要进一步的帮助,请编辑您的问题以进行澄清。