在 typeorm 中使用 select 插入

Insert using a select in typeorm

我想重现一个查询,其中的值是 typeorm 中 select 的结果。 我要重现的查询是我在此处提供的查询,但我在 typeorm 文档中找不到任何内容。 (查询对答案的作用并不重要,我只需要知道如何在 typeorm 中编写“SELECT”)

http://typeorm.delightful.studio/classes/_query_builder_insertquerybuilder_.insertquerybuilder.html#values

INSERT INTO `furgpezzo`(`giacenza`, `giacenzaMin`, `pezzoBarcode`, `furgoneTarga`, `invStandardId`) 
    select '0', '5', '234234234234', f.`furgoneTarga`, '1'
    from `furgpezzo` f
    where f.`invStandardId` = '1'
    group by f.`furgoneTarga`

类似于:

(编辑:)

return await this.dmDatabase.getRepository(FurgPezzo)
    .createQueryBuilder()
    .insert()
    .into(FurgPezzo)
    .values(   //here put my select   )

是的,你可以。来自 docs:

You can easily create subqueries. Subqueries are supported in FROM, WHERE and JOIN expressions.

例如参考以下帖子:, .

您可以使用子查询:

return await this.dmDatabase.getRepository(InvStandard)
    .insert()
    .values(qb => {qb.select(FurgPezzo).where()})//here put my select 

// with subquery->

return await this.dmDatabase.getRepository(InvStandard)
    .insert()
    .values(qb => {qb.select(FurgPezzo).where(
            const subQuery = qb.subQuery()
                // your subquery builder
            return "your condition " + subQuery;)})

这是我能想到的最巧妙的解决方案,希望对未来的探索者有所帮助。回答评论启发了我

      const [selectQuery, params] = this.entityManager
        .createQueryBuilder()
        .select('user.name')
        .from(User, 'user')
        .where('user.id IN (:...ids)', {
          ids: [
            '87654321-1234-1234-1234-123456789abc',
            'a9876521-aabb-ccdd-ffaa-123abcdefccc',
          ],
        })
        .getQueryAndParameters()

      await this.entityManager.query(
        `
        INSERT INTO dummy("name")
        ${selectQuery}
        `,
        params
      )