【发布时间】:2012-11-22 18:32:49
【问题描述】:
我的 SQLLite 数据库中有两个表。我正在尝试取回可以使用输入的成分制作的饮料。
我正在尝试制定此查询以获得我想要的。
餐桌饮品
列
drink_id |标题 |成分|方向 |成分编号
示例行看起来像
1 |蓝爸爸 | 1 根碎蓝冰棒、8 盎司酷爱饮料、4 盎司伏特加 |方向 | 3
餐桌食材
列
drink_id |成分
示例行看起来像
1 |蓝色冰棒
我现在的查询
这是我想要返回的部分伪代码(在我得到这个之后,我会动态地输入要查询的术语)。
我想返回所有输入量等于或大于饮料成分编号的饮料,并且那些输入的成分与饮料中所需的所有成分匹配。
SELECT drinks.title, drinks.ingredients, drinks.directions
FROM drinks, (SELECT count(ingredients._id) as ingredientNumber FROM ingredients
WHERE ingredients.ingredient LIKE '%rum%'
GROUP BY ingredients._id) as foundIngredients
WHERE drinks.ingredientsNum = foundIngredients.ingredientNumber;
谁能帮助我获得最适合的查询,甚至给我一些关于重组我的数据库模型的提示?我刚刚从一个 80k 行的长 JSON 文件创建了这个数据库。
【问题讨论】:
-
这是您的实际架构吗?您通过将成分数据包含在两个地方来对成分数据进行非规范化?表之间的关系是什么?似乎您需要一个包含外键drink_id 和component_id 的连接表。你能澄清一下吗?
-
是的,这是实际的架构。我的意思是我可以改变它,但最适合最好的查询。我正在尝试在 android 手机上查询它并希望它非常快。我认为将程序 (|) 中已经被实际分隔符分割的所有成分放入成分表中可能会更快。