我正在尝试进行不精确的连接(我不确定正确的术语是什么),我可以在其中执行模式匹配。基本上,不要像这样进行 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
,则需要在使用 LOWER()
之前对两列进行 POSITION()
。
您可以使用 POSITION() 函数或带有通配符的 LIKE 运算符。
SELECT * FROM your_table WHERE (POSITION( "Feild1" IN "Feild2") > 0) ;
或
SELECT * FROM your_table WHERE "Feild2" like '%' || "Feild1" || '%';