sql - 如何编写 SQL 查询以使返回值与多个输入相关?

标签 sql database

我有一个包含 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/

相关文章:

mysql - 卡在查询中。我想要每个委员会的学生总数

sql - 将问题数据存储到数据库中的最佳方法是什么?

database - 如何将sqlite数据库导入mathematica

c# - 检查 SQL Server 数据库表中是否存在表或列

sql - 在什么情况下这两个 SQL 查询会给出不同的结果?

php - 在第1行继续获取“检查与您的MySQL服务器版本相对应的手册,以找到在''')附近使用的正确语法。

sql - 如何记录数据库

java - JDBC 返回一个空的 ResultSet (rs.isBeforeFirst() == true) 尽管表不为空

sql - Android 无法将数据插入 Azure SQL,但可以插入数据

database - 安装 arangodb 时出错