支持我有一个包含字典中单词的fllowing表:
Word
---
cat
dog
giraffe
zebra
我想找一个单词,如果它不存在,则以dictionary顺序排在它前面,例如aardvark
将不返回任何内容,cat
将返回cat
,cow
将返回cat
,horse
将返回giraffe
。
使用BTREE索引进行搜索应该相对简单,但我还没有想出办法。我为此使用sqlite,但其他引擎也可以接受。
我只对字典顺序感兴趣,即查询应与上述示例完全一致。其他相似性指标当然不错,但与此问题无关。
答案 0 :(得分:1)
假设您已为字典顺序(可能是默认值,或COLLATE NOCASE
或用户定义的排序规则)声明了具有正确collation的列,则获得完全匹配是微不足道的:
SELECT Word FROM Dictionary WHERE Word = ?
并且最接近之前很容易:
SELECT MAX(Word) FROM Dictionary WHERE Word < ?
要仅获取这两个查询的第一个结果,请将它们与UNION ALL结合使用,并使用LIMIT 1
,以便在第一个查询成功时忽略第二个查询:
SELECT Word FROM Dictionary WHERE Word = ?
UNION ALL
SELECT MAX(Word) FROM Dictionary WHERE Word < ?
LIMIT 1
答案 1 :(得分:-1)
这可能有助于你
select a.word,b.word from dictionary a, words b
where difference (a.word,'DOG') in(3,4)
或者您可以使用soundex
功能
答案 2 :(得分:-1)
约匹配
select a.word,b.word from dictionary a, words b
where (b.word like '%'+right(a.word,2) )
或 完全匹配
select a.word,b.word from dictionary a, words b
where soundex(a.word)=soundex(b.word) or