理解SQLite查询
我正在使用SQLite进行培训,我正试图获得与美国农业部实施的搜索结果相同的结果 在如果我搜索“鸡胸肉熟烤”的搜索结果56个结果。 很抱歉,我想不出这个模式。使用与它们相同的数据库,如果我使用以下查询:理解SQLite查询,sql,sqlite,Sql,Sqlite,我正在使用SQLite进行培训,我正试图获得与美国农业部实施的搜索结果相同的结果 在如果我搜索“鸡胸肉熟烤”的搜索结果56个结果。 很抱歉,我想不出这个模式。使用与它们相同的数据库,如果我使用以下查询: SELECT * FROM FOODDATA WHERE FOODDES LIKE '%chicken%' OR FOODDES LIKE '%breast%' OR FOODDES LIKE '%cooked%' OR FOODDES LIKE '%roasted%'; 它给了我200
SELECT *
FROM FOODDATA
WHERE FOODDES LIKE '%chicken%' OR FOODDES LIKE '%breast%' OR FOODDES LIKE '%cooked%' OR FOODDES LIKE '%roasted%';
它给了我2000多个结果。对我来说,这是有道理的。使用和
替换或
只能得到2个结果。再一次,这是有道理的
美国农业部正在执行何种查询?使用
和而不是或:
SELECT *
FROM FOODDATA
WHERE FOODDES LIKE '%chicken%' AND FOODDES LIKE '%breast%' AND FOODDES LIKE '%cooked%' AND FOODDES LIKE '%roasted%';
字符大小写也可能导致差异。您只查找小写单词,请注意,它们的许多结果都以Chicken
开头,并以大写字母开头。将大写字母添加到和
条件中,然后查看结果
此外,SQLite的全文搜索扩展非常适合此类查询(即在较长文本中查找某些单词的查询)。像
这样的非常慢(数据库有多快)。您可以使用此查询调查关键字的匹配数:
SELECT ((FOODDES LIKE '%chicken%') +
(FOODDES LIKE '%breast%') +
(FOODDES LIKE '%cooked%')
(FOODDES LIKE '%roasted%')
) as NumMatches, count(*), min(fooddes), max(fooddes)
FROM FOODDATA
GROUP BY (FOODDES LIKE '%chicken%') +
(FOODDES LIKE '%breast%') +
(FOODDES LIKE '%cooked%')
(FOODDES LIKE '%roasted%')
ORDER BY NumMatches desc;
此查询只计算匹配的关键字数,并给出FOODDATA
中具有4个匹配项、3个匹配项的行数,依此类推。请尝试类似的操作
select
(FOODDES LIKE '%chicken%') + (FOODDES LIKE '%breast%') + (FOODDES LIKE '%cooked%') + (FOODDES LIKE '%roasted%') As matches ,
FOODDES
from
(
SELECT FOODDES
FROM FOODDATA
WHERE FOODDES LIKE '%chicken%' or FOODDES LIKE '%breast%' or FOODDES LIKE '%cooked%' or FOODDES LIKE '%roasted%'
) table1
where matches >=3
order by matches desc
他们可能在使用全文搜索:你有一个包含该网站所有数据的数据库吗?有些结果似乎是指“火鸡胸脯烤熟”,所以这看起来不像一个简单的SQL查询。他们可能在寻找4个关键词中的3个,或者他们可能有其他选择(比如用火鸡代替鸡肉)@LasseV.Karlsen Yes。它们为用户提供数据库文件download@sgmoore我注意到了。这让我想到,除了简单的SQL搜索,还有其他一些模式。问题已经说明,和
只给出两个结果;LIKE不区分大小写。@CL:当我回答这个问题时,它不区分大小写。另外,@Favolas在和中没有得到正确答案的事实是,他没有涵盖所有必要的案例,这并不是因为和是一个错误的选择。谢谢。没有完全理解您所做的,但相应地,他们将3和4个术语搜索结合起来。对吗?谢谢,但执行查询时出现以下错误:没有这样的列:。FOODDES如果FOODDES是您的列名,那么我认为这应该可以工作。(请看)它来自我使用的程序。