sql like子句多个值

时间:2011-11-09 15:54:43

标签: sql tsql

我有一个包含多个单词的表,从1到n。

declare @words table 
(
    word varchar(100) not null
)

insert into @words (word) values ('word1')
insert into @words (word) values ('word2')
insert into @words (word) values ('word3')

declare @tablea table 
(
    column1 varchar(100) not null
)

insert into @tablea (column1) values ('aword1a aword2a aword3a')
insert into @tablea (column1) values ('word2a')
insert into @tablea (column1) values ('word3a')

我无法编写查询以从列中选择这些单词的表中进行选择,并且我需要AND运算符。如果表包含word1,word2,word3,like子句必须匹配这三个单词,这意味着,我想返回tablea中的第一行。

select *
from tablea
where
    column1 like ?

3 个答案:

答案 0 :(得分:0)

由于任何一列都需要包含@words表中的所有值,我会使用not exists,并尝试在@words中找到一个未包含在column1中的值select * from @tablea a where not exists ( select 1 from @words w where a.column1 not like '%' + w.word + '%' ) 字段。

{{1}}

答案 1 :(得分:0)

<强>更新

select t.column1
from @tablea t
inner join @words w on charindex(w.word, t.column1) > 0
group by t.column1 
having count(distinct w.word) = (select count(*) from @words)

答案 2 :(得分:0)

这样做会,但我不确定它是多么可扩展:

SELECT column1
FROM @tablea t
    JOIN @words w ON t.column1 LIKE '%'+w.word+'%'
GROUP BY column1
HAVING COUNT(*) = (SELECT COUNT(*) FROM @words) 

从长远来看,您可能最好不要实施全文搜索。