TypeORM QueryRunner 选择不同的
Posted
技术标签:
【中文标题】TypeORM QueryRunner 选择不同的【英文标题】:TypeORM QueryRunner Select distinct 【发布时间】: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;
);
【问题讨论】:
【参考方案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();
谢谢
【讨论】:
以上是关于TypeORM QueryRunner 选择不同的的主要内容,如果未能解决你的问题,请参考以下文章