Сравнение подстрок в двух столбцах в таблицах в sqlite - PullRequest
1 голос
/ 06 мая 2020

Я использую Python и пытаюсь сравнить две таблицы в SQL и сопоставить их по частичным названиям стран. Пока что названия стран точно совпадают. У меня проблема с поиском частичных совпадений. Один пример, для которого я пытаюсь найти совпадение, - это «Бирма» в одной таблице и «Бирма (Мьянма)» в другой таблице.

conn = sqlite3.connect('CheapestDestinations.db')
c = conn.cursor()

c.execute('select FinalDestinations_table.CountryName, advisory_table.Country \
    FROM FinalDestinations_table JOIN advisory_table \
    WHERE FinalDestinations_table.CountryName like advisory_table.Country') 
c.fetchall() 

Это мой результат:

[('Mexico', 'Mexico'),
 ('Canada', 'Canada'),
 ('Costa Rica', 'Costa Rica'),
 ('Barbados', 'Barbados'),]

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Объедините подстановочный знак % для использования с оператором LIKE и измените предложение WHERE на предложение ON, потому что вы присоединяетесь к таблицам:

c.execute('select FinalDestinations_table.CountryName, advisory_table.Country \
    FROM FinalDestinations_table JOIN advisory_table \
    ON FinalDestinations_table.CountryName like "%" || advisory_table.Country || "%" \
    OR advisory_table.Country like "%" || FinalDestinations_table.CountryName || "%"') 
1 голос
/ 06 мая 2020

Частичные совпадения можно найти с помощью подстановочного знака %. Используя ваш пример:

conn = sqlite3.connect('CheapestDestinations.db') c = conn.cursor()

c.execute("select FinalDestinations_table.CountryName, advisory_table.Country 
\ FROM FinalDestinations_table JOIN advisory_table 
\ WHERE FinalDestinations_table.CountryName like '%' || advisory_table.Country || '%'") c.fetchall() 

Это изменение будет соответствовать FinalDestination_table.CountryName со страной в advisory_table, содержащем этот текст; например, «Бирма» будет соответствовать «Бирма (Мьянма)», «Бирма» и «Другое название Бирмы».

См. эту ссылку для получения дополнительных примеров и использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...