SQL-запрос, в котором предложение WHERE использует LIKE для всех данных из столбца в другой таблице - PullRequest
0 голосов
/ 14 марта 2019

Azure SQL Server 2017:

У нас есть таблица с именем dbo.keywords с одним столбцом, которая называется keywords. Этот столбец состоит из ~ 10 000 varchar(50) записей.

У нас есть еще одна таблица с именем dbo.articles. Обе таблицы находятся в одной базе данных.

Запрос, который мы пытаемся создать, будет таким:

SELECT * FROM dbo.articles
WHERE TextValue LIKE 
(**any of the 10,000 values of the keywords column in the dbo.keywords table**).

Часть в скобках выше - это часть, которую мне неясно выполнить. Если бы не часть LIKE, я полагаю, я мог бы использовать подзапрос SELECT, но часть LIKE - это то, что меня бросает.

Ответы [ 3 ]

2 голосов
/ 14 марта 2019

Я подозреваю, что это будет более "перфомантный" вариант (я использую кавычки, так как использование LIKE с лидирующим подстановочным знаком сделает запрос не SARGable):

SELECT *
FROM dbo.articles a
WHERE EXISTS (SELECT 1
              FROM dbo.keywords k
              WHERE a.TextValue LIKE '%' + k.keyword + '%');

Это позволит избежатьдублирующиеся строки и дорогостоящие DISTINCT;как я подозреваю, что TextValue может иметь некоторые длинные значения.

1 голос
/ 14 марта 2019

Вы хотите присоединиться к таблицам и использовать условие LIKE в условии объединения:

SELECT DISTINCT a.* FROM dbo.articles a
JOIN dbo.keywords k ON a.TextValue LIKE '%' + k.keywords + '%';
1 голос
/ 14 марта 2019

Вы можете достичь этого, используя JOIN с LIKE.

Не могли бы вы попробовать запрос ниже:

SELECT * 
FROM dbo.articles [AR] 
INNER JOIN dbo.keywords [KW] ON [AR].TextValue LIKE '%' + [KW].keywords + '%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...