假设这是我的表:
ID STRING
1 'ABC'
2 'DAE'
3 'BYYYYYY'
4 'H'
我想选择在另一行的 STRING 变量中某处的 STRING 列中至少有一个字符的所有行。
例如,
1
和 2
有一个 A
共同点和1
广告 3
有一个 B
共同点,但 4
与任何其他行没有任何共同的字符。所以我的查询应该只返回前三行。我不需要知道它与哪一行匹配。
谢谢!
最佳答案
@A.B.Cade:很好的解决方案,但可以在没有任何 distinct
的情况下完成也不是 join
.
SELECT * FROM test t1
WHERE EXISTS
(
SELECT * FROM test t2
WHERE t1.id<>t2.id AND
regexp_like(t1.string, '['|| replace(t2.string, '.[]', '\.\[\]')||']')
)
查询不会将字符串与额外的行进行比较,因为一旦为当前行找到 1 个匹配项,它就会停止比较...
See fiddle.
关于oracle - 字符串内的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922889/