gpt4 book ai didi

python - 在 SQL 中高效搜索子字符串 [Python/SQLite]

转载 作者:行者123 更新时间:2023-12-01 00:50:16 24 4
gpt4 key购买 nike

我有两个 SQLite 表(list1list2),每个表只有一个文本列 (val)。我想有效地搜索所有组合,其中 list2.value 可以是 list1.value 中的子字符串。

目前我有这个解决方案:

import sqlite3

list1 = ["this is string1", "this is string2", "this is string3"]
list2 = ["string1", "string2"]

in_memory = sqlite3.connect(':memory:')
c = in_memory.cursor()
c.execute('CREATE TABLE list1 (val text NOT NULL)')
c.execute('CREATE TABLE list2 (val text NOT NULL)')

for v in list1:
c.execute("INSERT INTO list1 VALUES (?)", (v, ))

for v in list2:
c.execute("INSERT INTO list2 VALUES (?)", (v, ))

l = [*c.execute("SELECT list1.val, list2.val FROM list1, list2 WHERE instr(list1.val, list2.val)")]
print(l)

正确打印:

[('this is string1', 'string1'), ('this is string2', 'string2')]

是否有比迭代每个 list1.vallist2.val 组合并搜索是否有子字符串更有效的 SQL 解决方案?

最佳答案

您可以将此表述为单个查询:

select l1.value, l2.value
from list1 l1 join
list2 l2
on l1.val like '%' || l2.val || '%';

在数据库内执行循环比自己执行循环稍微高效一些 - 因为只返回匹配的行,并且您没有多个查询的开销。

但是,这仍然会执行嵌套循环。这样的查询无法利用传统索引。

关于python - 在 SQL 中高效搜索子字符串 [Python/SQLite],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com