是否可以显示搜索中单词最多的数据? 例如,我有如下表:
没有 | 词 |
---|---|
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 的结果。
单向
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
如果表很大,性能会很差,因为它需要完整扫描 - 但前导通配符无论如何都需要它。