gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:06:07 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com