假设这是我的表:
ID STRING 1 'ABC' 2 'DAE' 3 'BYYYYYY' 4 'H'
我想在另一行的STRING变量中选择STRING列中至少有一个字符的所有行.
例如,1和2具有共同的A,1和3具有共同的B,但是4与任何其他行没有任何共同的字符.所以我的查询应该只返回前三行.
我不需要知道它匹配的是哪一行.
谢谢!
解决方法
@ A.B.Cade:很好的解决方案,但可以在没有任何明显或加入的情况下完成.
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.