【问题标题】:Typeorm subquery add selectTypeorm 子查询添加选择
【发布时间】:2019-03-13 07:00:11
【问题描述】:

我是使用typeorm 的新手,这是我第二次与typeorm 混淆,我有以下疑问:

SELECT t1.a,t1.b,t2.a
  (SELECT TOP 1 t1.a
  FROM table1 t1
  WHERE t1.b = t2.a
  ORDER BY t1.a DESC
  ) AS MaxT1
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.a = t2.a

我试过了:

let query = await getManager()
  .createQueryBuilder(Bid, 'bid')
    .select([
      'l.ID_anv_Lot',
      'l.LotNumber',
      'w.WineryName',
      'bid.BidAmount',
      'bid.ProxyBidAmount',
      'er.ID_Contact'
    ])
    .addSelect(Table1, t1)
    .innerJoin(Lot, 'l', 'l.lotNumber = bid.lotNum AND l.paddleNumber = bid.paddleNumber')

但结果是 table1 上的所有行

【问题讨论】:

标签: typeorm typeorm-datamapper


【解决方案1】:

这个例子可以帮助你执行子查询:

const posts = await connection.getRepository(Post)
            .createQueryBuilder("post")
            .where(qb => {
                const subQuery = qb.subQuery()
                    .select("usr.name")
                    .from(User, "usr")
                    .where("usr.registered = :registered")
                    .getQuery();
                return "post.title IN " + subQuery;
            })
            .setParameter("registered", true)
            .orderBy("post.id")
            .getMany();

【讨论】:

    【解决方案2】:

    您可以在 SELECT 语句中使用子选择:

    let query = await this.createQueryBuilder('t1')
        .select()
        .innnerJoin('t1.t2', 't2', 't1.a = t2.a')
        .addSelect(subQuery => {        
             return subQuery            
                  .select('_t1.a')            
                  .from(Table1, '_t1')
                  .where('_t1.b = t2.a');    
         }, 'MaxT1')
         .getRawMany()
    

    您可以在这里找到更多信息:https://orkhan.gitbook.io/typeorm/docs/select-query-builder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 2012-10-09
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多