PostgreSQL使用LIKE/ILIKE进行连接

19

我试图进行一种不精确的连接(我不确定正确的术语是什么),可以执行模式匹配。基本上,而不是像这样进行JOIN:

.... JOIN .... ON (t1.col = t2.col)

我想要做类似于:

.... JOIN .... ON (t1.col ILIKE %(t2.col)% )

第二个示例显然不是正确的语法。是否有一种方法可以做类似的事情?

2个回答

45
.... JOIN .... ON t1.col ILIKE '%' || t2.col || '%'
请注意,按照目前的写法,据我所知,PostgreSQL无法使用任何索引来加速连接处理。

30

另一种连接“t2.col的值是否为t1.col的子字符串”的替代方法:

... AS t1 JOIN ... AS t2 ON POSITION(t2.col IN t1.col)<>0

虽然这种方法仍然无法使用索引,但它的优点是您不必担心t2.col中的%_字符,否则它们会开始匹配所有内容。

如果您需要像ILIKE一样的不区分大小写的匹配,并且未使用citext,则需要在使用POSITION()之前对两个列进行LOWER()处理。


1
我认为这是一个非常聪明的解决方案。只是想澄清一下,我选择另一个答案是因为我认为它更加通用和开放。 - burger
1
谢谢,它对我有效,经过多次尝试后。 - HarisH Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接