TypeORM QueryRunner选择不同的

时间:2019-02-13 09:18:58

标签: mysql node.js typeorm

下面是我的SQL查询:

  

从剩下的订单中选择不同的ports.port_name加入port_master   orders.officeId = ports.portId;

如何使用typeorm查询运行程序以选择唯一的端口名来编写以上SQL?下面的语法获取所有端口

  

等待queryRunner.manager.find(订单,{               关系:[“端口”],               其中:过滤器           })。then((result:any)=> {               订单=结果;           });

4 个答案:

答案 0 :(得分:6)

另一种方法是使用查询生成器和distinct方法

await this.createQueryBuilder('entity name')
  .select('column')
  .distinct(true)
  .getRawMany();

答案 1 :(得分:0)

等待this.createQueryBuilder(“实体名称”).select('DISTINCT  (“专栏”)')。getRawMany();

答案 2 :(得分:0)

除了使用原始查询,您还可以使用下面提到的查询生成器

await getManager().createQueryBuilder(orders , "odrs")
.leftJoinAndSelect(ports, "pts", "odrs.officeId = pts.portId")
.select('DISTINCT odrs.port_name', 'port_name')
.orderBy("odrs.port_name", "ASC")
.getRawMany();

谢谢

答案 3 :(得分:0)

如果您使用的是 Postgresql,您可以使用 distinctOn 并且查询如下所示:

await getRepository(Feed)
      .createQueryBuilder('feed')
      .where({ uploaderId: In([1,2,3,4]) })
      .distinctOn(['feed.uploaderId'])
      .orderBy({ 'feed.uploaderId': 'ASC', 'feed.createdAt': 'DESC' })
      .getMany()

在上面的例子中有一个 Feed 表,我想获取给定数组中存在 Id 的行,并用 uploaderId 区分值,然后按 {{1} } 日期