我正在尝试进行不精确的连接(我不确定正确的术语是什么)我可以执行模式匹配。基本上,而不是这样做JOIN:
.... JOIN .... ON (t1.col = t2.col)
我想做的事情如下:
.... JOIN .... ON (t1.col ILIKE %(t2.col)% )
第二个例子显然不是正确的语法。有没有办法做这样的事情?
答案 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()
两列。