【问题标题】:TypeORM QueryRunner Select distinctTypeORM QueryRunner 选择不同的
【发布时间】:2019-07-07 01:36:19
【问题描述】:

下面是我的 SQL 查询:

Select distinct ports.port_name from orders left join port_master on orders.officeId = ports.portId;

如何使用 typeorm 查询运行器编写上述 SQL 来选择不同的端口名称?下面的语法获取所有端口

await queryRunner.manager.find(Orders, {
  relations: ["ports"],
  where: filter
}).then((result: any) => {
  orders = result;
});

【问题讨论】:

    标签: mysql node.js typeorm


    【解决方案1】:

    如果您使用的是 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 区分值,然后按 createdAt 日期对其进行排序

    【讨论】:

      【解决方案2】:
      await this.createQueryBuilder("Entity name")
        .select('DISTINCT ("column")')
        .getRawMany();
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          谢谢

          【讨论】:

            猜你喜欢
            • 2021-04-24
            • 1970-01-01
            • 1970-01-01
            • 2020-10-26
            • 2022-11-09
            • 2020-08-18
            • 2022-10-07
            • 1970-01-01
            • 2023-03-04
            相关资源
            最近更新 更多