我有一个包含 40,000 个“粗略”实体名称的数组,需要将它们与出现在包含 500,000 个实体的数据库中的“干净”名称进行匹配。使用粗略名称进行匹配(请参阅下面的 python 部分),我为提供的每个粗略名称获取 3 或 4 个可能的“干净名称”返回值。稍后的代码会选择最佳匹配。
对粗略名称进行简单循环对于 10 个名称来说没问题,但我不想在执行单独的数据库调用时循环遍历所有 40,000 个粗略名称!那么,是否可以编写一个 SQL 查询,一次性传递所有粗略名称,但确保返回的匹配项仍与每个粗略输入名称相关,以供进一步分析?
只是循环前 10 个粗略名称,我正在执行以下操作:
在Python中:
for index, row in rough_names_array.iterrows():
rough_string = str(row["rough_name"])
SQL_query = ("SELECT clean_name FROM big_db WHERE clean_name LIKE '%" + rough_string + "%' ")
query = big_db(SQL_query) //example code to make the DB call
clean_name_options = np.array(query["clean_name"])
我当前的 SQL 查询:
SELECT clean_name
FROM big_db
WHERE clean_name LIKE '%" + rough_string + "%'
最佳答案
我认为没有办法使用单个查询来提高效率。我将创建一个(可能是临时的)表来存储粗略名称,将数组批量插入其中,然后通过将 big_db
连接到该表来检索所有结果。
UPD:假设您创建一个名为 rough_names
的表,其中包含单列 rough_name
并填写它,查询将如下所示:
SELECT r.rough_name, b.clean_name
FROM big_db b
INNER JOIN rough_names r
ON b.clean_name LIKE '%'||r.rough_name||'%'
请注意,这不适用于 MS SQL Server,因为它不支持 ||
进行字符串连接;如果是这种情况,请使用 +
代替。
关于sql - 如何编写 SQL 查询以使返回值与多个输入相关?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040416/