typescript - typeorm querybuilder包括与查询无关的表?
问题描述
我目前正在尝试在 typeorm 中实现以下查询:
select id,"createdAt", "updatedAt","deactivatedAt",(EXTRACT(EPOCH FROM "deactivatedAt" - "createdAt")/3600 ) as lifespan
from (
select id,"createdAt", "updatedAt","deactivatedAt", (EXTRACT(EPOCH FROM "deactivatedAt" - "createdAt")/3600 )as time
from apartment_listing where active = false)as subquery
where subquery.time <24
为此,我在 TypeScript 中实现了以下代码:
const mainQuery = this.repository
.createQueryBuilder()
.select("subquery.id", "id")
.addSelect("subquery.time", "time")
.addSelect("subquery.created", "createdAt")
.addSelect("subquery.deactivated", "deactivatedAt")
.from(qb => {
const sub = qb.select(
"(EXTRACT(EPOCH FROM listing.deactivatedAt - listing.createdAt )/3600 )",
"time"
)
.addSelect("listing.deactivatedAt", "deactivated")
.addSelect("listing.id", "id")
.addSelect("listing.createdAt", "created")
.addSelect("listing.active","active")
.from(this.type, "listing")
.where("listing.active = false")
return sub;
}, "subquery")
.where("subquery.time < 24")
但是,在执行此代码时,typeorm 生成的查询不正确,并导致无限查询,最终使用 100% 的 ram。生成的查询是:
SELECT subquery.id AS "id", subquery.time AS "time", subquery.created AS "createdAt", subquery.deactivated AS "deactivatedAt"
FROM "apartment_listing" "ApartmentListing", (SELECT "listing"."id" AS "id", "listing"."active" AS "active", "listing"."createdAt" AS "created", "listing"."deactivatedAt" AS "deactivated", (EXTRACT(EPOCH FROM "listing"."deactivatedAt" - "listing"."createdAt" )/3600 ) AS "time" FROM "apartment_listing" "listing" WHERE "listing"."active" = false) "subquery"
WHERE subquery.time < 24
如您所见,在 FROM 子句中,它包括"apartment_listing" "ApartmentListing"
表和子查询。如果我在 PgAdmin 中复制并粘贴此查询,它也会以无限查询结束,但如果我"apartment_listing" "ApartmentListing",
从 FROM 子句中删除那个额外的表,结果是成功的,我得到了正确的结果。
为什么 typeORM 包括这个"apartment_listing" "ApartmentListing",
?在我的代码实现中,只有一个 FROM,它指向子查询。我怎样才能摆脱那个额外的表,以便查询成功执行?
提前致谢
解决方案
推荐阅读
- javascript - 可用于让 VS Code 终端查看更改的方法?
- vega-lite - Order stacked Vega Lite bar graph by specific order
- automation - Protractor click element with repeater
- dart - 飞镖符号文字
- r - “传播” na.locf 数据用于不规则时间数据
- prolog - swi-prolog 在第一个 true 与析取(或)后不会停止
- python - 在终端运行python,语法错误
- macos - 如何在 MacOS Catalina 中创建运行 shell 脚本的应用程序包?
- python - Clean up unlabeled pixels in image segmentation
- mysql - mysql - Applying an outer join to a complex statement