我想重现一个查询,其中值是typeorm中select的结果。
我要重现的查询是我在此处提供的查询,但是在typeorm文档中找不到任何内容。
(查询对答案的作用并不重要,我只需要知道如何在typeorm中写出“ SELECT
”)
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 )
答案 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
支持子查询,WHERE
和JOIN
表达式。
例如,请参见以下帖子:TypeORM subqueries,Typeorm 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;)})