0

我面临一个我不确定如何处理的数据库(特别是 sqlite)查询。

我正在寻找所有名称属性是某些提供的常量的子字符串的元组。

例如,它是一个包含食品的数据库。如果常数是“Maranatha Natural Almond Butter 26oz Lightly Roasted”,我希望数据库中包含“Almond Butter”、“Maranatha Natural”等词的任何元组作为匹配项返回。

我真的不知道如何有效地解决这个问题,任何帮助都将不胜感激。

4

2 回答 2

1

使用LIKE,但反过来:

SELECT *
FROM mytable
WHERE 'Maranatha Natural Almond Butter 26oz Lightly Roasted' LIKE '%' || name || '%'
于 2012-09-27T08:26:42.200 回答
0

我建议您尝试全文搜索。在您的示例中,您不一定需要它,因为它LIKE可能就足够了。但是,如果您只想匹配确切的单词(假设您搜索的单词set可能不想setting匹配)并且如果您想要匹配多个单词,无论它们出现在您的描述中的何处,FTS 都会非常有用。在使用它之前,请验证您的实现是否已使用它编译:

sqlite> pragma compile_options;
CURDIR
ENABLE_FTS3   <---- this one has to appear
ENABLE_RTREE
TEMP_STORE=1
THREADSAFE=0

假设您在 FTS 表中FoodItemsFTS填充了您之前提到的食物项目:

sqlite> CREATE VIRTUAL TABLE FoodItemsFTS USING fts3();
sqlite>
sqlite> INSERT INTO FoodItemsFTS (docid, content) 
        VALUES (1, "Maranatha Natural Almond Butter 26oz Lightly Roasted");
sqlite> INSERT INTO FoodItemsFTS (docid, content) 
        VALUES (2, "Maranatha Natural Almond Butter 26oz");
sqlite>
sqlite> SELECT docid FROM FoodItemsFTS WHERE FoodItemsFTS MATCH 'Almond Roasted';
1
sqlite>
于 2012-09-27T09:17:11.303 回答