如何显示搜索中单词最多的数据

问题描述 投票:0回答:1

是否可以显示搜索中单词最多的数据? 例如,我有如下表:

没有
1 b c e f g h j k l
2 a b c d e f g h i j k l
3 a b d f g h i k l
4 a c d e f h i k l
5 a b c d e f g h i j

如果我想显示“Word”有“a、b、c、d、e”的数据,它将按记录号 2、5、4、3、1 的顺序显示。 我已经尝试使用这个查询:

SELECT * FROM table
WHERE Word LIKE '%a%'
OR Word LIKE '%b%'
OR Word LIKE '%c%'
OR Word LIKE '%d%'
OR Word LIKE '%e%'

它可以工作,但它不能按它拥有的大多数单词进行排序。它只显示顺序为 1,2,3,4,5 的结果。

sql sql-server sql-like
1个回答
3
投票

单向

SELECT *
FROM   your_table
       CROSS APPLY (SELECT IIF(Word LIKE '%a%', 1, 0)
                           + IIF(Word LIKE '%b%', 1, 0)
                           + IIF(Word LIKE '%c%', 1, 0)
                           + IIF(Word LIKE '%d%', 1, 0)
                           + IIF(Word LIKE '%e%', 1, 0)) ca(match_count)
WHERE  match_count > 0
ORDER  BY match_count DESC 

如果表很大,性能会很差,因为它需要完整扫描 - 但前导通配符无论如何都需要它。

您可以查看全文搜索以获得此类事物的更好性能 - 示例

© www.soinside.com 2019 - 2024. All rights reserved.