Найти строки, в которых значение содержит слово из списка varchar (50) - PullRequest
2 голосов
/ 05 ноября 2019

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

Я использовал что-то, что ОБЪЕДИНЯЕТ все поля со значениями, тогда

...
AND (
        TEXT1234.AccountValue LIKE '%word1%'
     OR TEXT2345.AccountValue LIKE '%word1%'
     OR TEXT3456.AccountValue LIKE '%word1%'

     OR TEXT1234.AccountValue LIKE '%word2%'
     OR TEXT2345.AccountValue LIKE '%word2%'
     OR TEXT3456.AccountValue LIKE '%word2%'

     OR TEXT1234.AccountValue LIKE '%word3%'
     OR TEXT2345.AccountValue LIKE '%word3%'
     OR TEXT3456.AccountValue LIKE '%word3%'
...

Теперь я пытаюсьсделать что-то вроде этого:

declare @wordList table (Word varchar(50))
insert into @wordList values ('%word1%'),('%word2%'),('%word3%')...

...
SELECT *
FROM [DB1].dbo.Table_info
WHERE Account = 'TEXT1234'
AND AccountValue LIKE (SELECT * FROM @wordList)
...

(Это один из множества похожих кусков UNION. Вот почему я хотел бы использовать список слов, чтобы сократить код и содержать слова водно место в случае будущих изменений.)

ИЛИ что-то вроде:

SELECT *
FROM [DB1].dbo.Table_info
WHERE Account = 'TEXT1234'
AND AccountValue CONTAINS (SELECT * FROM @wordList)
...

Ожидаемый результат:

TEXT1234_Account   TEXT1234_AccountValue       Acct1234   Acct1234_Value
TEXT1234           word3 something something   ACCT1234   48

TEXT3456_Account   TEXT3456_AccountValue        Acct3456   Acct3456_Value
TEXT3456           Something word1 something    ACCT3456   48

Пожалуйста, дайте мне знать, если вам нужно больше кода дляпроанализируйте это ... (я уже не могу держать это краткое изложение.)

1 Ответ

3 голосов
/ 05 ноября 2019

Использовать EXISTS:

SELECT *
FROM [DB1].dbo.Table_info tbl
WHERE tbl.Account = 'TEXT1234'
AND EXISTS
(
    SELECT 0
    FROM @wordList wl
    WHERE tbl.AccountValue LIKE wl.Word
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...