Это может быть сложный способ ошибиться, но это работает с образцом, который я смоделировал.
Предполагается, что, поскольку вы "подстановочный поиск" строки из одной таблицы в другую, я предполагаю, что все слова в первом столбце таблицы появляются во втором столбце таблицы, что по умолчанию означает, что вторая таблица В столбце всегда будет более длинная строка, чем в первом столбце таблицы.
второе предположение состоит в том, что в первой таблице есть уникальный идентификатор, если его нет, вы можете создать его с помощью функции row_number и упорядочения в вашем строковом столбце.
Приведенный ниже подход сначала создает некоторые примерные данные (я использовал tablea и tableb для представления ваших таблиц).
Затем создается фиктивная таблица для хранения uniqueid для вашей первой таблицы и столбца строки.
Затем вызывается цикл для итерации по строке в фиктивной таблице и вставки уникального идентификатора и первого раздела строки, за которым следует пробел, в таблицу обработчиков, которую вы будете использовать для объединения двух целевых таблиц вместе. .
Следующий раздел соединяет первую таблицу с таблицей обработчиков с использованием уникального идентификатора, а затем присоединяет вторую таблицу к таблице обработчиков по ключевым словам длиной более 3 букв (избегая "" "и" и т. Д.), Присоединяясь к В первой таблице используется предположение, что строка в таблице b длиннее таблицы a (поскольку вы ищете экземпляры каждого слова в таблице столбца в соответствующем столбце таблицы b, отсюда и предположение).
declare @tablea table (
id int identity(1,1),
helptext nvarchar(50)
);
declare @tableb table (
id int identity(1,1),
helptext nvarchar(50)
);
insert @tablea (helptext)
values
('Text to find'),
('Georgia Production'),
('More to find');
insert @tableb (helptext)
values
('Georgia Independent Production'),
('More Text to Find'),
('something Completely different'),
('Text to find');
declare @stringtable table (
id int,
string nvarchar(50)
);
declare @stringmatch table (
id int,
stringmatch nvarchar(20)
);
insert @stringtable (id, string)
select id, helptext from @tablea;
update @stringtable set string = string + ' ';
while exists (select 1 from @stringtable)
begin
insert @stringmatch (id, stringmatch)
select id, substring(string,1,charindex(' ',string)) from @stringtable;
update @stringmatch set stringmatch = ltrim(rtrim(stringmatch));
update @stringtable set string=replace(string, stringmatch, '') from @stringtable tb inner join @stringmatch ma
on tb.id=ma.id and charindex(ma.stringmatch,tb.string)>0;
update @stringtable set string=LTRIM(string);
delete from @stringtable where string='' or string is null;
end
select a.*, b.* from @tablea a inner join @stringmatch m on a.id=m.id
inner join @tableb b on CHARINDEX(m.stringmatch,b.helptext)>0 and len(b.helptext)>len(a.helptext);