我有一个包含多个单词的表,从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 ?
答案 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)
从长远来看,您可能最好不要实施全文搜索。