I have 2 tables – Subscriptions and Periods. I’m trying to join first and last periods in my Subsctiption. Here’s a part of code of how I’m adding a subquery.
private addPeriodsQuery() {
const subquery = `
SELECT "period"."id" AS periods_id,
"period"."subscription_id" AS periods_subscription_id,
"period"."start" AS periods_start,
"period"."end" AS periods_end,
ROW_NUMBER() OVER (PARTITION BY "period"."subscription_id" ORDER BY "period"."start" ASC) AS "start_rank",
ROW_NUMBER() OVER (PARTITION BY "period"."subscription_id" ORDER BY "period"."end" ASC) AS "end_rank"
FROM "subscription_period" "period"
`;
this.qb
.leftJoinAndMapMany(
'sub.periods',
`(${subquery})`,
'periods',
'sub.id = periods.periods_subscription_id',
)
.andWhere('periods.start_rank = 1 OR periods.end_rank = 1');
}
The generated SQL query seems to be right, but typeorms mapper just not maps data to the property.
@Entity()
export class SubscriptionSchema {
@PrimaryGeneratedColumn('uuid', {})
id: string;
...
public periods?: SubscriptionPeriodSchema[];
...
Does anybody succeed in working with leftJoinAndMapMany
or leftJoinAndMapOne
with subqueries?