Поиск нескольких значений в предложении IN, расположенном в предложении where - PullRequest
0 голосов
/ 19 июня 2019

Я расширяю функциональность поиска, и мне нужно добавить поиск по нескольким значениям в предложении IN.Итак, у меня есть текстовое поле и напишите в нем некоторое число.Это динамическая функциональность, которая может добавить синтаксис запроса к предложению WHERE в sql и должна добавляться только при поиске.

Допустим, мы поместили 1056 в наше текстовое поле для его поиска.

SELECT
   * 
FROM 
    QueryTable 
WHERE 
   (Select ID from SearchTable Where Number='1056') IN 
         (SELECT value FROM OPENJSON(JsonField,'$.Data.ArrayOfIds'))

Это работает правильно, потому что поиск идентификатора в SearchTable возвращает одну строку, но я хочу, чтобы она работала, когда возвращает несколько строк, что-то вроде этого:

(Select ID from SearchTable Where Number like '%105%')

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

1 Ответ

1 голос
/ 19 июня 2019

Используйте EXISTS. Я думаю это то, что вам нужно (нет образцов данных для проверки):

FROM QueryTable QT
WHERE EXISTS (SELECT 1
              FROM SearchTable ST
                   JOIN OPENJSON(QT.JsonField,'$.Data.ArrayOfIds') J ON ST.ID = J.[value]
              WHERE ST.Number LIKE '%105%')

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

...