Microsoft SQL查找列包含数组中所有项的行

时间:2014-01-21 23:12:11

标签: sql arrays search split

我正在尝试找到最有效的方法来获取已拆分并将其与列匹配的数组项。

例如,

数组[鼠标,猫,狗]

我需要找到一列,其中列动物有3个项目(鼠标,猫,狗) 我找到了方法,如果找到任何这些项目,但不是全部。 我可以使用递归,但它不理想,因为我也将不得不搜索其他列以及相同的字段。

declare @Search varchar(100)
set  @Search = 'mouse dog cat'; 

DECLARE @tblWords TABLE( ID int,ArrayValue VARCHAR(500))
INSERT INTO @tblWords (ID, ArrayValue) SELECT * FROM [dbo].[Splitstring] (@Search, ' ')

SELECT   ID, animal ,COUNT(*) as [Result] 
FROM @tblWords
    JOIN zoo 
    on animal like '%' + ArrayValue + '%' 
       GROUP BY  ID, animal

此结果将查找是否找到这3个项目中的任何一个但不是全部。 我做错了什么。

1 个答案:

答案 0 :(得分:0)

您需要having子句来计算匹配数:

SELECT z.ID, z.animal, COUNT(*) as [Result] 
FROM @tblWords w JOIN
    zoo z
    on z.animal like '%' + w.ArrayValue + '%' 
GROUP BY z.ID, z.animal
HAVING count(*) = (select count(*) from @tblWords);