SqlServer 2008 - удаление строк, содержащих термины, найденные в таблице черного списка - PullRequest
2 голосов
/ 11 мая 2011

У меня есть две таблицы, одна представляет собой список строк, а другая содержит список слов, перечисленных в черном списке.Я хочу найти все строки в первой таблице, что их строка содержит слово из второй.

, используя оператор like, я создал следующий скрипт, и он работал:
select a.string<br> from A a<br> left join BlackList b on a.string like '%' + b.Term + '%'<br> where b.Term is null<br>

Я хотел использовать полнотекстовый поиск для повышения производительности.Я искал способ сделать это: select a.string<br> from A a<br> left join BlackList b on contains(a.string, b.Term)<br> where b.Term is null<br>

Мое исследование в Интернете обнаружило, что это невозможно, это их другой способ сделать это?

1 Ответ

1 голос
/ 11 мая 2011

Вам нужно бегать построчно, поэтому попробуйте CROSS APPLY. Нет совпадений = нет строки в запросе CROSS APPLY, которая совпадает с LEFT JOIN..IS NULL

select
   a.string
from
   A a
   CROSS APPLY
   (SELECT b.Term FROM BlackList b WHERE contains(a.string, b.Term)) foo
...