在where子句

时间:2019-06-19 08:02:31

标签: sql sql-server sql-server-2016

我正在扩展搜索功能,我需要在IN子句中添加对多个值的搜索。所以我有文本框,并在其中写了一些数字。这是动态功能,可以将查询语法添加到sql的WHERE子句中,仅在搜索时才应添加。

假设我们在文本框中输入1056进行搜索。

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

这是正确的,因为在SearchTable中搜索ID返回一行,但是我想使其在返回多行时起作用,就像这样:

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

这显然会产生错误,因为它返回多个记录。 在IN子句中搜索多个值(或值的数组)的方法是什么。

1 个答案:

答案 0 :(得分:1)

使用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的别名。量化列非常重要,这样可以避免意外行为,并使您自己和他人的代码都易于阅读。