如何使用 select 子查询批量插入
How to bulk insert with a select subquery
我在项目中使用 Sequelize,但在将简单查询转换为 Sequelize 时遇到了一些麻烦。此外,我正在寻找一种方法来批量插入此查询。
查询:
INSERT INTO productstatistics (shopId, productId, average, min, max)
VALUES (SELECT p."shopId", p."productId", avg(p."basicPrice") as average, min(p."basicPrice"), max(p."basicPrice") FROM productprice p
WHERE p."productId" = 123 AND p."shopId" = 321)
对于上下文,我有 3 个 tables:商店、产品和产品价格。
每个产品都存在于每个商店中。每个组合产品/商店,productPrices 都有该商店所有价格的历史记录。
在这里,我正在尝试创建一个新的 table productstatistics,其中包含来自这 3 table 的一些统计数据。
我尝试的第一件事是遍历我所有的商店,然后遍历我的所有产品并执行 Sequelize raw query.
但就我而言,这是超过 3 000 000 条记录。我可以在异步中做到这一点,但它需要永远,或者用 Promise.all()
做,但后来我达到了 :
JavaScript heap out of memory
如何以最好的方式使用 Sequelize 来实现我的目标?有没有一种方法可以使用 Sequelize 来 运行 之前描述的查询以及我所有的产品和商店?
您要么需要使用 Sequelize.query
来执行您在问题中指出的原始 SQL 查询,要么将查询的 SELECT
部分作为原始 SQL 查询执行(再次使用 Sequelize.query
)从 productprice
开始,使用 limit
和 offset
选项,并使用 Sequelize 模型的 bulkInsert
。
我在项目中使用 Sequelize,但在将简单查询转换为 Sequelize 时遇到了一些麻烦。此外,我正在寻找一种方法来批量插入此查询。
查询:
INSERT INTO productstatistics (shopId, productId, average, min, max)
VALUES (SELECT p."shopId", p."productId", avg(p."basicPrice") as average, min(p."basicPrice"), max(p."basicPrice") FROM productprice p
WHERE p."productId" = 123 AND p."shopId" = 321)
对于上下文,我有 3 个 tables:商店、产品和产品价格。 每个产品都存在于每个商店中。每个组合产品/商店,productPrices 都有该商店所有价格的历史记录。
在这里,我正在尝试创建一个新的 table productstatistics,其中包含来自这 3 table 的一些统计数据。
我尝试的第一件事是遍历我所有的商店,然后遍历我的所有产品并执行 Sequelize raw query.
但就我而言,这是超过 3 000 000 条记录。我可以在异步中做到这一点,但它需要永远,或者用 Promise.all()
做,但后来我达到了 :
JavaScript heap out of memory
如何以最好的方式使用 Sequelize 来实现我的目标?有没有一种方法可以使用 Sequelize 来 运行 之前描述的查询以及我所有的产品和商店?
您要么需要使用 Sequelize.query
来执行您在问题中指出的原始 SQL 查询,要么将查询的 SELECT
部分作为原始 SQL 查询执行(再次使用 Sequelize.query
)从 productprice
开始,使用 limit
和 offset
选项,并使用 Sequelize 模型的 bulkInsert
。