我正在扩展搜索功能,我需要在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子句中搜索多个值(或值的数组)的方法是什么。
答案 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
的别名。量化列非常重要,这样可以避免意外行为,并使您自己和他人的代码都易于阅读。