如何使用 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 开始,使用 limitoffset 选项,并使用 Sequelize 模型的 bulkInsert