我正在制作一个 SQLite 数据库,但我有许多类似的表 - 有没有办法将它们组合起来?
Posted
技术标签:
【中文标题】我正在制作一个 SQLite 数据库,但我有许多类似的表 - 有没有办法将它们组合起来?【英文标题】:I'm making an SQLite database but I have many similar tables - is there a way to combine them? 【发布时间】:2021-10-01 21:00:33 【问题描述】:所以我试图将产品的价格和数量信息存储在游戏内的“股票市场”中,可用的数据是当前的买入价、卖出价、过去 7 天卖出的物品数量,以及过去 7 天内购买的商品数量。
现在,我有一张过去 24 小时的购买价格表,其中包含列(时间、项目 1、项目 2、项目 3 ......),在每一行中,有一个时间戳,然后是价格当时的每个项目。
然后我有一个几乎相同的销售价格、购买量和销售量表(意思是,列名相同,但存储的数据不同)。
重新创建表:
CREATE TABLE buy_prices (
time INTEGER NOT NULL,
item1 INTEGER NOT NULL DEFAULT 0,
item2 INTEGER NOT NULL DEFAULT 0,
...
itemN INTEGER NOT NULL DEFAULT 0
);
对表 sell_prices、buy_volume 和 sell_volume 重复
在设定的时间间隔内,表格 buy_prices 更新为
INSERT INTO buy_prices(time, item1, item2, ... itemN)
VALUES (api_response['lastUpdated'], api_response['item1']['buy'], api_response['item2']['buy'], ... api_response['itemN']['buy']);
然后对于 sell_prices、buy_volume、sell_volume 类似(对于 api 响应使用不同的键)
这是我第一次创建数据库,所以我觉得我遗漏了一些显而易见的东西,但是有没有办法将所有这些组合到一个表中?在我的脑海中,我在想像字典之类的东西,每个单元格将存储所有 4 个值,但我不知道这是否可能,也不知道这是否合理。
tl;dr 我应该有很多类似的表格,还是有一个解决方案,每个单元格中有很多值?
【问题讨论】:
请阅读您使用的标签 (***.com/tags/sqlite/info) 的标签信息 wiki,并按照此处所述提供 MRE。 @Yunnosch 添加,希望够了 这个数据模型看起来很奇怪。对于每个产品一列,您必须知道有多少产品(或定义数据库中可能的产品的最大数量)。在典型的数据模型中,您宁愿有一个产品表,每个产品一行。此表可以包含当前的购买价格和销售价格,或者您可以有单独的表(例如链接到产品供应商的 product_supplier 表,甚至可能包含该价格有效的日期范围)。 @ThorstenKettner 每个产品有一行的产品表的问题是我也想知道过去的价格,以便获得 24 小时价格图表。早些时候,我正在考虑做 6 列time | product name | buy price | sell price | buy volume | sell volume
但这最终会产生荒谬的行数(产品数量 *(24 小时/测量之间的时间))。荒谬的行数值得权衡吗?
【参考方案1】:
您可以使用 UNION 或 UNION ALL 语句来合并这些表。 UNION 运算符删除重复行,而 UNION ALL 运算符则不会。
with merged_table as(
select field1, field2, field3...., fieldn
from tablename1
union
select field1, field2, field3...., fieldn
from tablename2 )
select * from merged_table;
您应该从 table1 和 table2 中以相同的顺序选择字段...
【讨论】:
如果我对工会的理解正确,这会不会只是将它们全部塞进一张表中而没有任何关于它们来自哪个表的信息?如果有意义的话,我正在寻找一种将不同表中的行组合成一行的方法 如果您使用相同的字段和相同的数据类型创建这些表,您可以使用上面的查询并且应该可以工作,无论如何您可以替换共享查询的字段名称以上是关于我正在制作一个 SQLite 数据库,但我有许多类似的表 - 有没有办法将它们组合起来?的主要内容,如果未能解决你的问题,请参考以下文章
sqlite3 Vacuum,如何在cordova APP上使用