PostgreSQL 使用 LIKE/ILIKE 加入

问题描述 投票:0回答:3

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

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

我想做这样的事情:

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

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

sql postgresql
3个回答
47
投票
.... JOIN .... ON t1.col ILIKE '%' || t2.col || '%'

请注意,正如所写,据我所知,PostgreSQL 将无法使用任何索引来加速连接处理。


32
投票

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

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

这仍然无法使用索引,但优点是您不必担心

%
中的
_
t2.col
字符,否则它们会开始匹配所有内容。

如果您需要像

ILIKE
这样不区分大小写的匹配,并且您没有使用
citext
,则需要在使用
LOWER()
之前对两列进行
POSITION()


0
投票

您可以使用 POSITION() 函数或带有通配符的 LIKE 运算符。

SELECT * FROM your_table WHERE (POSITION( "Feild1" IN "Feild2") > 0) ;

SELECT * FROM your_table WHERE "Feild2" like  '%' ||  "Feild1" || '%';
© www.soinside.com 2019 - 2024. All rights reserved.