【问题标题】:Insert using a select in typeorm在 typeorm 中使用选择插入
【发布时间】:2019-12-13 05:58:53
【问题描述】:

我想重现一个查询,其中值是 typeorm 中选择的结果。 我想重现的查询是我在此处提供的查询,但我在 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   )

【问题讨论】:

    标签: javascript mysql typescript typeorm typeorm-datamapper


    【解决方案1】:

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

          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
          )
    

    【讨论】:

      【解决方案2】:

      是的,你可以。来自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;)})
      

      【讨论】:

      • 我写了一个错误的答案...我必须对其进行编辑。我想要的是在“值”上使用该子查询。我找不到路
      • @MarcoZanonfurbino1 不确定是否可以在使用当前模板的值上使用。但我能想到的可能替代方法是使用原始查询并运行它;例如:await manager.query('INSERT statement... select statement...')
      • 我这样做了,现在问题已经解决了。非常感谢
      • 这个答案断章取义
      • .values() 甚至不将 queryBuilder 作为参数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 2022-01-02
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多