Как сравнить два разных строковых значения, разделенных запятыми, и проверить, существует ли ЛЮБОЕ из значений из разных строк, разделенных запятыми, в первом - PullRequest
0 голосов
/ 29 января 2019

Я надеюсь, что смогу объяснить это хорошо.Если что-то не понятно, пожалуйста, спросите

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

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

TABLE # 1

User #1 value: ,1,
User #2 value: ,1,3,5,12,
User #3 value: ,12,
User #4 value: ,14,3,5, 
User #5 value: ,14, 

Моя таблица секунд имеет очень похожее поле.Если у меня во второй таблице есть записи, подобные этой:

TABLE # 2

User #1 value: ,3,
User #2 value: ,3,
User #3 value: ,3,
User #4 value: ,10,
User #5 value: ,11,5,12,
User #6 value: ,5,12,

Так что я пытаюсь добиться, например, взять значение User # 2 из TABLE #1, и я хочу получить всех пользователей в ТАБЛИЦЕ № 2, где любое из их значений содержится в значениях пользователей № 2.Поскольку пользователь № 2 имеет значение 1,3,5,12, я должен получить результат из таблицы 2 следующим образом:

User #1 
User #2
User #3
User #5 
User #6

В настоящее время я использую следующее:

SELECT a.Name
FROM TABLE2 a
WHERE
CharIndex(','+convert(varchar,a.Agency)+',',(Select Agency from TABLE1 where UserID = 123)) > 0

Похоже, это не дает желаемых результатов.Это будет прекрасно работать, если в TABLE # 1 есть только 1 значение, например, 3, но не несколько значений.

1 Ответ

0 голосов
/ 01 февраля 2019

Вы можете попробовать следующий запрос, чтобы получить ожидаемый результат.

SELECT DISTINCT a.Name
FROM TABLE2 a,
     dbo.Split((SELECT Agency
                  FROM TABLE1
                  WHERE UserID = 2),',') AS b
WHERE a.Agency LIKE '%,'+b.Slit_Func_ColumnName+',%'

Использовать функцию SPLIT.

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