我确定之前已经问过,但我不知道如何搜索它。
首先,我不想实现全文搜索。该数据库包含多种语言,包括中文和日文,这对全文索引构成了巨大的问题。
我有一张如下表格:
表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连接它们,但我不知道我是否能找到更有效的东西。
答案 0 :(得分:0)
一种简单的方法是使用条件聚合:
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
答案 1 :(得分:-1)
刚发布问题让我想到了答案。
select distinct UserID from (
select UserID FROM Comment where CommentText like '%java%'
UNION
select UserID FROM Comment where CommentText like '%python%'
) as a