我试图进行一种不精确的连接(我不确定正确的术语是什么),可以执行模式匹配。基本上,而不是像这样进行JOIN:
.... JOIN .... ON (t1.col = t2.col)
我想要做类似于:
.... JOIN .... ON (t1.col ILIKE %(t2.col)% )
第二个示例显然不是正确的语法。是否有一种方法可以做类似的事情?
我试图进行一种不精确的连接(我不确定正确的术语是什么),可以执行模式匹配。基本上,而不是像这样进行JOIN:
.... JOIN .... ON (t1.col = t2.col)
我想要做类似于:
.... JOIN .... ON (t1.col ILIKE %(t2.col)% )
第二个示例显然不是正确的语法。是否有一种方法可以做类似的事情?
.... JOIN .... ON t1.col ILIKE '%' || t2.col || '%'
请注意,按照目前的写法,据我所知,PostgreSQL无法使用任何索引来加速连接处理。另一种连接“t2.col的值是否为t1.col的子字符串”的替代方法:
... AS t1 JOIN ... AS t2 ON POSITION(t2.col IN t1.col)<>0
虽然这种方法仍然无法使用索引,但它的优点是您不必担心t2.col
中的%
和_
字符,否则它们会开始匹配所有内容。
如果您需要像ILIKE
一样的不区分大小写的匹配,并且未使用citext
,则需要在使用POSITION()
之前对两个列进行LOWER()
处理。