我想在SQL Server中编写一个查询,搜索某些列中的某些单词,并使用匹配单词的数量对结果进行排序。例如,在打击中,结果的顺序必须是:Row2,Row3,Row1。
搜索字符串:w1 w2 w3
第1行:第1列 = w1 w4
第2列 = w5 w6
==> 匹配单词:w1
第2行:第1列 = w1 w2
第2列 = w3 w4
==> 匹配单词: w1
w2
w3
第3行:第1列 = w1 w2
第2列 = w5 w6
==> 匹配单词: w1
w2
第4行:第1列 = w5 w6
第2列 = w7 w8 w9
我的代码:select * from Table1 where contains((col1,col2),@search))
答案 0 :(得分:0)
查看CONTAINSTABLE语句,它可以帮助您通过匹配排名来对结果进行排序。
create table Table1 (id int primary key identity(1,1), col1 varchar(100), col2 varchar(100));
GO
create fulltext catalog Test AS DEFAULT;
GO
create fulltext index on Table1(col1, col2)
key index PK__Table1__3213E83FFB568640 ON Test;
GO
insert into Table1 (col1, col2)
values
('w1 w4','w5 w6')
,('w1 w2','w3 w4')
,('w1 w2','w5 w6')
,('w5 w6','w7 w8 w9')
declare @search varchar(100) = 'w1 or w2 or w3';
select * from Table1 T
join CONTAINSTABLE(Table1, (col1,col2), @search) AS M ON T.ID = M.[KEY]
order by M.[RANK] DESC;
答案 1 :(得分:0)
实现目标的简便方法:
;WITH
words_to_search as (
select 'w1' w union all
select 'w2' w union all
select 'w2' w ),
searching as (
select Id
from your_table t
inner join words_to_search w
on t.column1 + t.column2 like '%' + w.w + '%' ),
ranking_it as (
select Id, count(*) as n
from searching
group by Id )
select *
from ranking_it r -- joining your table if you need
order by r.n;
小心表现,对于concat和操作会很糟糕。