首页 > 解决方案 > 我正在制作一个 SQLite 数据库,但我有许多类似的表 - 有没有办法将它们组合起来?

问题描述

所以我试图在游戏中的“股票市场”上存储产品的价格和数量信息,可用的数据是当前的买入价、卖出价、最近 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;博士我应该有很多类似的表格,还是每个单元格中有很多值的解决方案?

标签: sqlsqlite

解决方案


您可以使用 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 中以相同的顺序选择字段...


推荐阅读