选择属性是常量的子串

时间:2012-09-27 07:18:36

标签: database sqlite

我面临着一个数据库(特定于sqlite)的查询,我不知道如何处理。

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

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

我真的对如何有效地解决这个问题感到茫然,并且非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用LIKE,但反过来说:

SELECT *
FROM mytable
WHERE 'Maranatha Natural Almond Butter 26oz Lightly Roasted' LIKE '%' || name || '%'

答案 1 :(得分:0)

我建议你试试full-text searching。在您的示例中,您不一定需要它,因为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>