我确定之前已经问过,但我不知道如何搜索它。
首先,我不想实现全文搜索。该数据库包含多种语言,包括中文和日文,这对全文索引构成了巨大的问题。
我有一个如下表:
表Comment
:
UserID int
CommentText nvarchar(400)
我想对这个表进行搜索,找到匹配多个单词的任何内容。通常我会做类似的事情
select *
from Comment
where CommentText like '%potato%' and CommentText like '%badger%'
但如果这两个词在不同的行中,我需要做类似的事情
select
UserID, count(UserID )
from
Comment
where
CommentText like '%potato%' or CommentText like '%badger%'
group by
UserID
having
count(UserID ) > 1
但是如果这些单词有时在同一行并且有时会分布在多行中,我该如何判断这两个单词是否匹配?
案例:
我的问题是:对于多个单词,如何进行通配符搜索并确保所有单词对于给定的UserID至少匹配一次?
提前致谢
我正在考虑使用CTE来获取包含匹配项的所有行并将其连接到给定的用户ID,但我不知道是否可以找到更高效的内容。
处理此问题的简单方法是使用条件聚合:
SELECT UserID
FROM Comment
GROUP BY UserID
HAVING
SUM(CASE WHEN CommentText LIKE '%java%' THEN 1 ELSE 0 END) > 0 AND
SUM(CASE WHEN CommentText LIKE '%python%' THEN 1 ELSE 0 END) > 0;
HAVING
子句中的每个总和都会跟踪您想要匹配的每个单词。仅当至少一个记录具有肯定匹配时,对于两个单词,用户才会在结果集中出现。
请注意,如果您打算继续沿着这条路走,那么您应该研究SQL Server的全文功能。
https://docs.microsoft.com/en-us/sql/relational-databases/search/full-text-search
只是发布问题让我想到了答案。
select distinct UserID from (
select UserID FROM Comment where CommentText like '%java%'
UNION
select UserID FROM Comment where CommentText like '%python%'
) as a