Sql在字符串中搜索多个单词,知道其中一些可能不存在

Sql在字符串中搜索多个单词,知道其中一些可能不存在,sql,join,sqlite,inner-join,Sql,Join,Sqlite,Inner Join,我有一个满是字符串的表,我想搜索一堆单词,并检索至少包含其中一个的字符串,例如: 我想搜索的单词是“猫”、“狗”和“蝙蝠” 表中的一些字符串是: 1 "hi cat, I like dogs and owls" 2 "hi cat" 3 "hey bat, cat, owl, dog" 4 "orange is sweet" 此查询应返回1、2和3,而不是4 我知道join可能是一个解决方案,但我不知道如何用超过6个单词来实现它 编辑: 有没有一种方法可以按最大的比赛对结果进行排序?这

我有一个满是字符串的表,我想搜索一堆单词,并检索至少包含其中一个的字符串,例如:

我想搜索的单词是“猫”、“狗”和“蝙蝠”

表中的一些字符串是:

1  "hi cat, I like dogs and owls"
2  "hi cat"
3  "hey bat, cat, owl, dog"
4  "orange is sweet"
此查询应返回1、2和3,而不是4

我知道join可能是一个解决方案,但我不知道如何用超过6个单词来实现它

编辑:
有没有一种方法可以按最大的比赛对结果进行排序?这意味着我希望第一个结果是包含大多数键(如果有的话)的结果,这就是为什么我忽略了LIKE-OR组合

您可以使用
PATINDEX
函数,该函数返回字符串中匹配项的索引。如果不匹配,则返回0,因此请尝试以下脚本:

declare @x table(
ID int identity(1,1),
name varchar(30)
)

insert into @x values ('hi cat, I like dogs and owls'), ('hi cat'),('hey bat, cat, owl, dog'),('orange is sweet')

select ID from @x where PATINDEX('%cat%', name) + PATINDEX('%dog%', name) + PATINDEX('%bat%', name)  > 0
另一种解决方案是使用类似于操作符的

select ID from @x where name LIKE '%cat%' or name LIKE '%dog%' or name LIKE '%bat%'
回答您的编辑,第一种方法是最好的。您可以通过以下查询获得所需的结果(不幸的是,它变得不太复杂):


告诉我们你在查询中尝试了什么..我在我的手机上,但我会描述我做了什么,我搜索每个单词,将结果放入临时表中,然后在相同ID上加入表,但这将在两个以上的单词中失败,因为单词的顺序将产生不同的结果OK,所以无论何时你可以离开手机,请附上@ArunVinoth要求的内容。有没有办法按最大匹配对结果进行排序?这意味着我希望第一个结果是包含大多数键(如果有的话)的结果,这就是为什么我忽略了LIKE-OR组合。
select ID from @x 
where PATINDEX('%cat%', name) + PATINDEX('%dog%', name) + PATINDEX('%bat%', name)  > 0
order by case PATINDEX('%cat%', name) when 0 then 0 else 1 end + 
         case PATINDEX('%dog%', name) when 0 then 0 else 1 end +
         case PATINDEX('%bat%', name) when 0 then 0 else 1 end
desc
DROP table #TEMP
create table #Temp
(
    string Varchar(50), 
)

insert into #Temp (string) values
('hi cat, I like dogs and owls'),
('hi cat'),
('orange is sweet'),
('hey bat, cat, owl, dog')


SELECT * FROM #Temp WHERE string LIKE '%cat%'