У меня есть две таблицы SQLite (list1
и list2
), каждая из которых содержит только один текстовый столбец (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')]
Существует ли более эффективное решение SQL, чем повторение для каждого list1.val
и list2.val
сочетание и поиск, если есть подстрока?