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

Microsoft SQL查找列中包含数组中所有项的行,sql,arrays,search,split,Sql,Arrays,Search,Split,我试图找到最有效的方法来获取被拆分的数组项并将其与列匹配 比如说 数组[鼠标、猫、狗] 我需要找到一行,其中列animal包含所有3项(鼠标、猫、狗) 我找到了一些方法,找到了其中的任何一项,但不是全部。 我可以使用递归实现,但这并不理想,因为我还必须搜索其他列以查找同一字段 declare @Search varchar(100) set @Search = 'mouse dog cat'; DECLARE @tblWords TABLE( ID int,ArrayValue VARCH

我试图找到最有效的方法来获取被拆分的数组项并将其与列匹配

比如说 数组[鼠标、猫、狗]

我需要找到一行,其中列animal包含所有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项中的任何一项,但不是全部。
我做错了什么。

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

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);

列动物是否包含诸如“猫-鼠-狗”之类的项目?因为那只是。。。糟糕透了。这是学习规范化的一种方法。嗨,这很有帮助,但奇怪的是,我仍然得到很多只有一项的记录。即使计数显示为2。它的计数不正确我认为连接是错误的,因为它显示了正在搜索的单个项目。我相信是错误的,因为animal列是一个包含许多项目的大字符串。从城市到动物种类等等。。它是一个注释字段,实际上没有特定的分隔符,可以是空格或昏迷。我不知道你的数据是什么样的,但“山猫”会和“猫”匹配,“狗鱼”会和“狗”匹配。您可能有这种类型的错误匹配。也许递归可以更好地查找数组中的多个项,搜索所有项?