Insert using a select in typeorm

marco-zan reymerk picture marco-zan reymerk · Aug 5, 2019 · Viewed 8.3k times · Source

I want to reproduce a query where the values are the result of a select in typeorm. The query i want to reproduce is the one i provide here, but i can't find anything in typeorm documentation. (Isnt important what the query does for the answer, i only need to know how to write that "SELECT" in typeorm)

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`

something like:

(Edit:)

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

Answer

Ertan Kara picture Ertan Kara · Mar 8, 2021

This is the neatest solution I could come up with, hope it helps future explorers. The answer comments inspired me.

      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
      )