【发布时间】:2020-11-01 22:47:13
【问题描述】:
我的数据库中有 3 个实体,我们可以想象这 3 个(我只保留了重要的列)
User
@PrimaryColumn()
nick: string
@OneToMany(type => Connection, connection => connection.user)
connections:Connection[]
Connection
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(type => User,user => user.connections)
user: User;
@ManyToOne(type => Stream)
stream: Stream;
Stream
@PrimaryGeneratedColumn()
id: number;
我认为我有一些在 typeorm 中构建查询的技能,但我现在被困在使用子查询上。
我想做什么? 加入部分连接实体上的所有用户实体(选择几个连接实体作为子查询 => 制作 leftJoin 用户子查询 => 过滤结果以获取未找到右侧(连接)端的连接,因此连接 ID 为 NULL )。
我尝试了什么?
let query = await connectionRepository
.createQueryBuilder('connection')
.subQuery()
.where("connection.id = :id",{id:1})
.select(['connection.id','connection.user AS nick'])
.getQuery();
const result = await userRepository.createQueryBuilder("user")
.leftJoinAndSelect("user.permissions", '(' + query + ')')
.where("user.nick = :nick")
.andWhere(`(${query}).id is null`)
.getMany();
我也尝试使用不带 .getQuery() 的子查询,但无论如何它都不起作用,我认为我可以编写 Ok 子查询,但是在第二个查询中使用它时遇到问题(带有子查询属性等) 我也看过一些 lambda 函数的例子,但是 lambda 总是在 leftJoin 的第一位。
感谢您的回答:)
【问题讨论】:
-
请用“人类语言”而不是 SQL 描述您希望实现的目标。您想获得什么样的数据?
-
我想获取所有没有连接到特定流的用户。