MS SQL Как проверить, существует ли хотя бы 1 подстрока в строке? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть 2 таблицы:

CREATE TABLE TabSTR
(
   ID INT,
   SBSTR VARCHAR(1000)
)

CREATE TABLE TabSubSTR
(
   ID INT,
   SubSBSTR VARCHAR(100)
)

И мне нужно получить все строки из 1-й таблицы TabSTR, где в SBSTR существует один список SubSBSTR.

 SELECT * FROM TabSTR A
 WHERE EXISTS (SELECT 1 FROM TabSubSTR B WHERE A.SBSTR LIKE '%' + B.SubSBSTR + '%')

Тестовые данные:

1-я таблица:

INSERT INTO TabSTR VALUES (1, 'This is first row')
INSERT INTO TabSTR VALUES (2, 'This is second row')
INSERT INTO TabSTR VALUES (3, 'Third row is here')
INSERT INTO TabSTR VALUES (4, 'Another third row')
INSERT INTO TabSTR VALUES (5, 'Hello word')
INSERT INTO TabSTR VALUES (6, 'Hello')

2-я таблица:

INSERT INTO TabSubSTR VALUES (1, '1st')
INSERT INTO TabSubSTR VALUES (2, 'second')
INSERT INTO TabSubSTR VALUES (3, 'third')
INSERT INTO TabSubSTR VALUES (4, 'four')
INSERT INTO TabSubSTR VALUES (5, '5th')
INSERT INTO TabSubSTR VALUES (6, '6th')
INSERT INTO TabSubSTR VALUES (7, 'ord')

Результаты:

2,'This is second row'
4,'Another third row'
5,'Hello word'

Проблема: оператор LIKE работает очень медленно, когда Есть тысячи строк для сравнения. Я пробовал также полнотекстовый поиск здесь, но он также очень медленный, когда количество строк в TabSubSTR ~ 200k

Может быть, у smb есть другие идеи? Заранее спасибо

...