SQL Server: поиск по 2 таблицам с использованием функции LIKE - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть таблица SQL Server Cases со столбцом, содержащим номера регистра, и столбцом с именем match.

У меня также есть другая таблица Messages.В этой таблице есть один столбец с именем Message, который содержит большое количество случайных текстовых строк, которые могут содержать или не содержать номер дела, указанный в таблице Case.

Что я хочу сделать, это перебрать каждую отдельную запись в таблице Cases и посмотреть, существует ли каждый из этих номеров случаев где-либо внутри записи в столбце сообщения в таблице Messages.

Мне нужно использовать оператор LIKE, который включает в себя номер дела из Cases (номера дела).Если номер дела найден где-либо в таблице Messages, я хочу обновить столбец Cases.Match до 1 (true).

Я заблудился, как это сделать.Пока что я просто пытаюсь получить номера дел, которые существуют где-то в столбце Message в таблице Messages.

SELECT *
FROM Cases
INNER JOIN Messages ON Cases.CaseNumber LIKE '%'+ Messages.Message + '%'

Структуры данных

Случаи :

  • Номер дела VARCHAR (MAX)
  • Соответствие BIT

Сообщения :

  • Сообщение VARCHAR (MAX)

Я использую SQL Server 2008 R2

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

проверьте, существует ли каждый из этих регистрационных номеров где-либо в записи в сообщении

Ваша первая проблема заключается в том, что вы используете LIKE неправильно.Это условие:

Cases.CaseNumber LIKE '%'+ Messages.Message + '%'

должно быть записано наоборот:

Messages.Message LIKE '%'+ Cases.CaseNumber + '%'

Если номер дела найден где-нибудь в таблице 2 (сообщения), я хочуобновить столбец table1 "match" на 1 (true).

Вы можете написать запрос UPDATE, который использует коррелированный подзапрос, чтобы проверить, соответствует ли текущий случай в таблице сообщений:

UPDATE c
SET c.match = 1
FROM cases c
WHERE EXISTS (
    SELECT 1
    FROM messages m
    WHERE m.Message LIKE '%' + c.CaseNumber + '%'
)
0 голосов
/ 28 сентября 2019
create stored procedure update_if_found
    (@casenumber varchar(max)) 
as
begin
    if exists(select 1 from messages where message like '%'+ @casenumber +'%')
        update cases 
        set match = 1 
        where casenumber = @casenumber
end;

Запустите эту процедуру для каждой строки в случаях (см. Примеры для получения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...