android - 在表的行中连接多个具有表名的 SQL 表

标签 android sqlite

我正在使用 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/

相关文章:

android - 使用本地 list 的 repo 不起作用

android - 在电子邮件android中设置可点击链接

sql - 返回不在 SQL 列表中的最小整数

java - 检查数据库中密码的函数

python - 类型错误 : Invalid argument(s) 'pool_size' sent to create_engine() when using flask_sqlalchemy

android - ionic : unable to build app after installing `cordova-plugin-fcm`

android - 换个角不画背景?

android - 如何在 Android 上使用 framebuffer 进行绘图?

java - 执行PreparedStatement select失败

mySQL/SQlite 减法查询