выборка по частичному совпадению значений из другой таблицы
Есть две таблицы. Основная и содержащая слова-исключения.
Первая основная (образно tab1)
Id | Title
1 | Яблоко красное
2 | Зеленое яблоко
3 | Спелый апельсин
4 | Желтый банан
5 | Киви зеленое
Вторая таблица tab2
Id | ExceptWord
1 | яблоко
2 | киви
Смысл запроса - вывести все записи столбца Title таблицы №1, кроме тех что совпадают частично со всем содержимым стоблца ExceptWord таблицы №2
Работает следующий запрос:
SELECT Title FROM tab1 WHERE Title NOT IN (SELECT ExceptWord FROM tab2)
Но он выводит только по точному совпадению всей фразы. Не могу додумать, когда прикрутить LIKE%%, чтобы в конечном итоге вернулись две записи "Спелый апельсин" и "Желтый банан".
Ответы (3 шт):
Автор решения: Антон
→ Ссылка
letters = []
letters2 = []
count = 0
for item in tab1[:]:
for item2 in tab2[:]:
for letter in str (item.title()):
for letter2 in str (item2.title()):
count += 1
letters.append (letter)
letters2.append (letter2)
if count == len (str (item)):
count = 0
if not (letters == letters2):
print (item)
print (item2)
Попробуйте так. Не знаю,что получится!
Автор решения: gil9red
→ Ссылка
Думаю, примерно такой будет запрос sqlite:
SELECT Title FROM tab1
WHERE (SELECT count(*) FROM tab2 where lower(tab1.title) like '%' || lower(ExceptWord) || '%') = 0
Автор решения: Ainar-G
→ Ссылка
Как-то так:
SELECT *
FROM t_1
WHERE NOT EXISTS (
SELECT *
FROM t_2
WHERE t_1.title LIKE ('%' || t_2.exceptword || '%')
)
;
Не забывайте, что для поддержки русских букв должно быть загружено соотв. расширение и установлены прагмы.