了解SQLite查询

时间:2014-07-18 09:11:12

标签: sql sqlite

我正在使用SQLite进行培训,我正在努力获得与美国农业部实施的搜索结果相同的结果。

USDA food list search中,如果我搜索“煮熟的鸡胸肉”搜索结果56。 我无法弄清楚这种模式。使用与它们相同的数据库,如果我使用以下查询:

SELECT *
  FROM FOODDATA
 WHERE FOODDES LIKE '%chicken%' OR FOODDES LIKE '%breast%' OR FOODDES LIKE '%cooked%' OR FOODDES LIKE '%roasted%';

它给了我超过2000个结果。对我来说有意义。使用AND替换OR只能获得2个结果。再一次,它是有道理的。

美国农业部的表现是什么样的?

3 个答案:

答案 0 :(得分:1)

您可以使用此查询调查关键字的匹配数量:

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个匹配项等的行数。

答案 1 :(得分:1)

尝试类似

的内容
 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

答案 2 :(得分:-1)

使用AND代替OR

SELECT *
  FROM FOODDATA
 WHERE FOODDES LIKE '%chicken%' AND FOODDES LIKE '%breast%' AND FOODDES LIKE '%cooked%' AND FOODDES LIKE '%roasted%';

此外,角色案例可能会导致差异。您只查找小写单词并注意,它们的大量结果以Chicken开头,大写。将大写字母大小写添加到AND条件并查看结果。

此外,SQLite的全文搜索扩展非常适合此类查询(即在较长文本中查找某些单词的查询)。 LIKE非常慢(至于数据库的速度有多快)。