#sql-server #pattern-matching
#sql-server #сопоставление с образцом
Вопрос:
Мне нужно запросить две таблицы компаний, в первой таблице указаны полные названия компаний, а во второй таблице также указаны имена, но они неполные. Идея состоит в том, чтобы найти похожие поля. Я помещаю изображения ссылки и кода SQL, который я использую.
Результат, который я хочу, выглядит следующим образом
Самый близкий способ, который я нашел для этого:
SELECT DISTINCT
RTRIM(a.NombreEmpresaBD_A) as NombreReal,
b.EmpresaDB_B as NombreIncompleto
FROM EmpresaDB_A a, EmpresaDB_B b
WHERE a.NombreEmpresaBD_A LIKE 'VoIP%' AND b.EmpresaDB_B LIKE 'VoIP%'
Проблема с приведенным выше кодом заключается в том, что он возвращает только запись, указанную в WHERE, и если я ставлю это КАК ‘%’, он возвращает декартово произведение двух таблиц. СУБД — это Microsoft SQL Server. Я был бы очень признателен, если бы вы помогли мне с любым предложенным решением.
Ответ №1:
Используйте короткое имя плюс добавленный ‘%’ в качестве аргумента в выражении LIKE:
Редактировать с информацией о том, что мы имеем дело с SQL Server:
SELECT a.NombreEmpresaBD_A as NombreReal
,b.NombreEmpresaBD_B as NombreIncompleto
FROM EmpresaDB_A a, EmpresaDB_B b
WHERE a.NombreEmpresaBD_A LIKE (b.NombreEmpresaBD_B '%');
Согласно вашему скриншоту, у вас было неправильное имя столбца!
Конкатенация строк в T-SQL с
помощью operator .
Приведенный выше запрос находит случай, когда
'Computex S.A' LIKE 'Computex%'
но не:
'Voip Service Mexico' LIKE 'VoipService%'
Для этого вам придется сначала удалить пробелы или использовать более мощные функции сопоставления с образцом.
Я создал демонстрационную версию для вас на data.SE .
Найдите сопоставление шаблонов или АНАЛОГИЧНЫЙ оператор в руководстве.
Комментарии:
1. Это сервер Microsoft SQL. Примените логику решения, которое вы предлагаете, без encambio не получили никаких результатов.
2. Большое вам спасибо, предложенное решение является наиболее успешным. В конце отправьте результаты в другую таблицу с помощью INSERT INTO, и все сработало нормально. Я ценю вашу помощь.
Ответ №2:
Я бы предложил добавить внешний ключ между таблицами, связывающими данные. Затем вы можете просто выполнить поиск в одной таблице и присоединиться ко второй, чтобы получить другие результаты.