1

我正在使用 SQLite,我不确定这是否可以完成。考虑我有这些表:

======>Table: Total_Table

_id    Name   Ingredients

0     "A"     "table_a"<br>
1     "B"     "table_b"

=====>Table: table_a

 _id    Name

 0      "a_1" <br>
 1      "a_2"

=====>Table: table_b

_id    Name
0      "a_1" <br>

行中引用的表Total_Table具有不同的行数,并在Total_Table添加行时创建。

目前,我需要构建一个查询,该查询将从Total_Table.

但会搜索Ingredients表格的条目。

例如,如果我正在查找表中Total_Table包含a_1的所有行Ingredients,它将返回0,1来自Total_Table.

目前,我通过查询 的所有行来执行此Total_Table操作,然后遍历这些条目并单独查询每个表,然后形成一个数组。

这很糟糕,因为我正在查看的表格相对较大,并且会损害性能。

有任何想法吗?谢谢!

4

2 回答 2

1

我认为您会发现使用稍微不同的数据库架构会更容易。SQLite 是一个关系数据库,所以让我们尝试相应地存储东西。基本上,我们将有 3 个表,一个用于Total_Table,一个用于您的成分,以及一个用于将哪些成分映射到Total_Table.

从逻辑上讲,它将如下所示:

Table: Total_Table

_id    Name
0      "A"
1      "B"

Table: Ingredients

_id    Name

0      "a_1"
1      "a_2"

Table: Total_Ingredients

total_id  ingredient_id
0         0
0         1
1         0

这里的好处很多。首先,您不需要在运行时创建任何表。无论您有多少Total_Table条目,您都需要 3 个表格。二是查询方便。第三,您不会a_1在修改后的模式中的任何地方复制名称(这称为Database normalization)。

然后,您的查询将如下所示。请注意,在示例数据中,a_1id 为 0,我们将用于查询目的。

select _id, Name from Total_Table where id in 
  (select total_id from Total_Ingredients where ingredient_id = 0)

更新:如果我理解正确,您的其他查询非常相似。因此,您需要具有部分或全部给定成分的食谱。假设您的子集在此示例中包括 id 1、5 和 7,唯一的变化是使用in子句。

select _id, Name from Total_Table where id in 
  (select distinct total_id from Total_Ingredients where ingredient_id in (1,5,7)) 
于 2012-07-24T13:52:42.467 回答
0

尝试将您的表组合为一个(最好是视图),然后进行查找。或按如下方式运行您的查询:

String name = "bla bla bla";

"SELECT DISTINCT _id FROM Total_Table WHERE _id IN
     ((SELECT _id FROM table_a WHERE Name='" + name + "') UNION ALL
      (SELECT _id FROM table_b WHERE Name='" + name + "'))"
于 2012-07-24T13:55:06.050 回答