我面临着一个数据库(特定于sqlite)的查询,我不知道如何处理。
我正在寻找所有元组名称属性是一些提供的常量的子字符串。
例如,它是一个包含食品的数据库。如果常数是“Maranatha Natural Almond Butter 26oz Lightly Roasted”,我希望数据库中包含“Almond Butter”,“Maranatha Natural”等字样的任何元组都将作为匹配项返回。
我真的对如何有效地解决这个问题感到茫然,并且非常感谢任何帮助。
答案 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>