ORM 하위 쿼리 유형
유형 기준하위 쿼리 사용에 대한 ORM 문서에는 하위 쿼리를 만드는 방법이 설명되어 있습니다.예:
const qb = await getRepository(Post).createQueryBuilder("post");
const posts = qb
.where("post.title IN " + qb.subQuery().select("user.name").from(User, "user").where("user.registered = :registered").getQuery())
.setParameter("registered", true)
.getMany();
그러나 SQL이 무엇인지에 대해서는 동등한 것이 없습니다.
다음과 같은 하위 쿼리가 포함된 쿼리가 있다고 가정합니다.
SELECT a, TO_CHAR (MAX (jointable.f), 'MON YYYY') as f,
t3.c, t3.d, t1.e
FROM table1 t1
LEFT JOIN table2 t2 ON t2.e = t1.e
JOIN table3 t3 ON t3.d = t2.d
JOIN
(SELECT f, t4.g, t5.e, t6.h
FROM table4 t4
JOIN table5 t5 ON t4.g = t5.g
JOIN table6 t6 ON t6.g = t4.g
AND (t6.i = 2
OR (t6.i = 1 AND j = 1)
)
WHERE t4.k = 4
) jointable ON t1.e = jointable.e
WHERE jointable.h = :h
AND(:d = 3 OR
t3."d" = :d
)
GROUP BY a, t3.c, t3.d, t1.e
ORDER BY a ASC
유형 사용 방법위의 SQL 쿼리에 대한 ORM 쿼리 작성기 함수?
위 쿼리에서 사용 중인 모든 테이블과 관련된 엔티티를 생성했다고 가정합니다.
이 답변이 다른 사람들이 TypeORM 하위 쿼리를 사용하는 데 도움이 되기를 바랍니다.
const subquery = await getManager()
.createQueryBuilder(table4, 't4')
.select('"t4".f')
.addSelect('"t4".g')
.addSelect('"t5".e')
.addSelect('"t6".h')
.innerJoin(table5, 't5', '"t4".g = "t5".g')
.innerJoin(table6, 't6', '"t6".g = "t4".g')
.where('"t4".k = 4 AND ("t6".i = 2 OR ("t6".i = 1 AND "t6".j = 1))');
model = await getManager()
.createQueryBuilder(table1, 't1')
.select('"t1".a')
.addSelect("TO_CHAR (MAX (jointable.f), 'MON YYYY')", 'f')
.addSelect('"t3".c')
.addSelect('"t3".d')
.addSelect('"t1".e')
.leftJoin('table2', 't2', '"t2".e = "t1".e')
.innerJoin(table3, 't3', '"t3".d = "t2".d')
.innerJoin('('+subquery.getQuery()+')', 'jointable', '"t1".e = jointable.e')
.where('jointable.h = :h AND (:d = 3 OR "t3".d = :d)',
{ h: h, d: d })
.groupBy('"t1".a, "t3".c, "t3".d, "t1".e')
.orderBy('"t1".a', 'ASC')
.getRawMany();
사용하고 있었습니다.'('+subquery.getQuery()+')'
하위 쿼리를 가져오려면 쿼리를 다음과 동일하게 선택합니다.
(f, t4.g, t5.e, t6.h...를 선택합니다.)
......
) 조인트 가능 ON t1.e = 조인트 가능.e
제가 이해한 바에 따르면:
.select
이며 이에 상응합니다.select
SQL에서.SQL에서와 같이 추가할 수도 있습니다..addSelect
와 유사합니다., in select
Select query builder를 사용하여 얻을 수 있는 결과에는 엔티티 또는 원시 결과의 두 가지 유형이 있습니다.데이터를 엔터티로 사용할지 여부를 설명합니다(
getOne
그리고.getMany
) 또는 그것이 무엇인지(getRawOne
그리고.getRawMany
).
언급URL : https://stackoverflow.com/questions/53553523/typeorm-subqueries
'programing' 카테고리의 다른 글
파이어베이스 안드로이드에서 특정 값에 대한 푸시된 ID 가져오기 (0) | 2023.06.26 |
---|---|
SQL Server 2005 데이터베이스의 모든 보기를 나열하는 SQL 쿼리 (0) | 2023.06.26 |
깃허브에서 어떻게 두 지점을 나눌 수 있습니까? (0) | 2023.06.26 |
각진 스프링 부츠JS html5 모드 (0) | 2023.06.26 |
변경 및 새 메시지를 커밋하지 않는 방법? (0) | 2023.06.26 |