使用typeorm中的select插入

时间:2019-08-05 17:11:27

标签: javascript mysql typescript typeorm typeorm-datamapper

我想重现一个查询,其中值是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   )

2 个答案:

答案 0 :(得分:1)

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

      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
      )

答案 1 :(得分:0)

可以。来自docs

  

您可以轻松创建子查询。 FROM支持子查询,   WHEREJOIN表达式。

例如,请参见以下帖子:TypeORM subqueriesTypeorm subquery add select

您可以使用子查询:

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;)})