PostgreSQL使用LIKE / ILIKE加入

时间:2010-09-22 18:43:41

标签: sql postgresql

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

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

我想做的事情如下:

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

第二个例子显然不是正确的语法。有没有办法做这样的事情?

2 个答案:

答案 0 :(得分:22)

.... JOIN .... ON t1.col ILIKE '%' || t2.col || '%'

请注意,正如AFAIK所写,PostgreSQL将无法使用任何索引来加速加入处理。

答案 1 :(得分:15)

另一种加入方式是“t2.col的值是t1.col的子字符串”:

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

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

如果你需要像ILIKE这样不区分大小写的匹配而你没有使用citext,那么在使用LOWER()之前你需要POSITION()两列。

相关问题