프로그래밍/TypeORM
4. WHERE과 subQuery, COUNT를 조건으로 걸기
카카수(kakasoo)
2023. 1. 10. 23:55
반응형
const users = await this
.createQueryBuilder('user')
.withDeleted()
.where('user.id = :userId', { userId })
.andWhere((qb) => {
// 지금까지 결제한 횟수를 알기 위해 OrderInfo 라는 Entity를 카운트한다.
const subQuery = qb
.subQuery()
.select('COUNT(*)')
.from(OrderInfoEntity, 'oi')
.where('oi.userId = :userId', { userId })
.getQuery();
return `${subQuery} <= 2`;
})
.getMany();
where문에는 파라미터로 문자열을 받을 수도 있지만, 서브쿼리를 파라미터로 하는 함수를 받을 수도 있다.
이 때 내부 파라미터로 받은 함수는 다시 문자열을 반환해야 한다.
문자열이든, 문자열을 반환하는 함수든, 결국 그 문자열은 조건을 의미해야 하며,
서브쿼리를 받을 경우 위 코드와 같이 subQuery()
로 시작해서 getQuery()
로 끝나는 서브 쿼리문을 쓴다.
이 서브 쿼리를 이용해서 위와 같이, 특정 숫자보다 작은 경우를 잡을 수도 있다.
select, addSelect의 경우에는 subQuery()도 없고 문자열이 아니라 SelectQueryBuilder를 리턴해야 한다.
하지만 where ,andWhere은 문자열을 받기 때문에 subQuery(), getQuery()를 가지는 게 차이점이다.
반응형