TypeORM 使用子查询连接表

问题描述 投票:0回答:1

我有一个 MySQL 数据库和一个使用该数据库的 Nestjs API。在数据库上,有两个主要表

users
reservations
。它们具有 OneToMany 关系,即每个预订与一个用户相关联,并且每个用户可以有多个预订。

我想创建一个列出所有用户的查询,并为每个用户返回下一个最近的预订。我想出了这个 SQL 查询:

SELECT *
FROM users u
LEFT JOIN reservations r
ON u.id = r.user_id
AND r.start_date = (
    SELECT MIN(start_date) FROM reservations r2
    WHERE r2.user_id = r.user_id 
    AND r2.start_date >= CURRENT_TIMESTAMP()
    AND r2.status = 'OPEN'
);

如何将此查询转换为 TypeORM 查询?

javascript sql mysql nestjs typeorm
1个回答
0
投票

您可以通过查询生成器与子查询相结合来实现此目的,如下所示:

UserEntity.getRepository()
    .createQueryBuilder('user')
    .leftJoinAndSelect('user.reservations', 'reservation')
 .where(qb => {
      const sub = qb
        .subQuery()
        .select('MIN(start_date)')
        .from('reservations', 'r2')
        .where('r2.user_id = r.user_id')
        .andWhere('r2.start_date >= CURRENT_TIMESTAMP()')
        .andWhere('r2.status = :status', { status: 'OPEN' })
        .getQuery();

      return `r2.start_date = (${sub})`;
    });

请参阅 Typeorm 文档,了解如何使用查询生成器进行选择:https://typeorm.io/select-query-builder

© www.soinside.com 2019 - 2024. All rights reserved.