Oracle SQL - 需要基于成对值列表构建 WHERE 子句

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

我有一个地址表,分为 STREET_NUMBER 和 STREET_NAME 以及相关字段。我想在表中搜索特定的地址列表。我可以使用以下命令运行单地址查询:

Select * from TABLE
WHERE STREET_NUMBER = '123'
AND STREET_NAME LIKE '%MAIN%'

如何设置 WHERE 子句来接受 STREET_NAME/STREET_NUMBER 对列表?大致如下:

Select * from TABLE
WHERE STREET_NUMBER in ('123', '231', '5245', '73334')
AND STREET_NAME LIKE ('%MAIN%', '%ELM%', '%BROAD%', '%FIRST%')

目的是提取地址接近的任何记录:

数量 街道
123 主要
231 榆木
5245 广阔
73334 第三

我需要类似于 STREET_NAME 的 LIKE 功能,因为该列中的值不是很干净 - 全部都包括街道延伸部分,但它们不一致(“Road”与“Rd”;“Avenue”与“Ave”等) .).

sql oracle
1个回答
0
投票

没有办法在“常规”SQL 中优雅且有效地做到这一点。 您必须开始使用 Oracle Text 或将数据复制到 Elasticsearch 中。

Select * from TABLE
WHERE 1=0
or (STREET_NUMBER = '123' and STREET_NAME LIKE '%MAIN%')
or (STREET_NUMBER = '231' and STREET_NAME LIKE '%ELM%')
or (STREET_NUMBER = '5245' AND STREET_NAME LIKE '%BROAD%')
or (STREET_NUMBER = '73334' AND STREET_NAME LIKE '%FIRST%')
© www.soinside.com 2019 - 2024. All rights reserved.