我正在使用 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
中所有在其 Ingredients
表中具有 a_1 的行,它将返回行 0,1
来自 Total_Table
。
目前,我通过查询 Total_Table
的所有行来执行此操作,然后遍历这些条目并单独查询每个表,同时形成一个数组。
这非常糟糕,因为我正在查看的表格相对较大,并且会影响性能。
有什么想法吗?谢谢!
最佳答案
我想您会发现使用稍微不同的数据库架构会更容易。 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_1
的 id 为 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))
关于android - 在表的行中连接多个具有表名的 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632085/