Postgresql:查询一个对列表,其中一个字段是模糊匹配,另一个字段是完全匹配的



我想根据street name查询多个地址,city。街道名称是模糊匹配的,而城市是精确的。如果我们查询单个记录,则以下工作:

SELECT
*
FROM
Addresses a
WHERE
a.street like '32 foxrun%' --could be foxrun st or foxrun street
AND
a.city = 'Montreal'

问题

我想对数千个街道名称/城市对运行上述查询。我知道我可以使用

LIKE ANY('{32 foxrun%, 45 main%}')

以匹配街道名称,但由于可能有相当多的主要街道,因此添加额外的地址组件 City 会有所帮助。此外,我知道我可以将 WHERE 子句分解为每个城市的 OR,如下所示:

WHERE
(a.street LIKE ANY('{32 foxrun%, 45 main%}') and a.city = 'Montreal')
OR
(a.street LIKE ANY('{74 broad%, 2 kings%}') and a.city = 'Los Angeles')

但由于城市数量可以达到数千个,我希望有一个更有效的解决方案。

谢谢!

您可以对values子句使用连接:

select a.*
from addresses a
join (
values 
('32 foxrun%', 'Montreal'), 
('42 answer%', 'London'), 
.... more parameters ...
) as t(street, city) on a.city = t.city and a.street like t.street;

最新更新