Search code examples
javascriptmysqltypescripttypeormtypeorm-datamapper

Insert using a select in typeorm


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   )

Solution

  • Yes you can. From docs:

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

    Refer to the following posts for example: TypeORM subqueries, Typeorm subquery add select.

    You can use subqueries:

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