我想根据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;