mysql - TypeORM 不是唯一的表/别名:'TABLE_NAME'
问题描述
我正在使用 NESTJS WITH
MYSQL` 我正在尝试获取表的关系数据。我有两列与一个公共实体相关。当我尝试获取数据时,我得到了跟随错误。我无法理解如何解决这个问题。任何帮助都会得到帮助
{
"exception": {
"message": "ER_NONUNIQ_TABLE: Not unique table/alias: 'users'",
"code": "ER_NONUNIQ_TABLE",
"errno": 1066,
"sqlMessage": "Not unique table/alias: 'users'",
"sqlState": "42000",
"index": 0,}
}
实体如下
@Entity('leave')
export class LeaveEntity {
@PrimaryGeneratedColumn('increment')
id: number;
// relation between approver and user
@ManyToOne(() => UserEntity, u => u.id, {
eager: false,
cascade: false,
nullable: true
})
approvedBy: UserEntity[];
// relation between leave and users
@ManyToOne(() => UserEntity, user => user.id, {
eager: false,
cascade: false,
nullable: false
})
user: UserEntity[];
}
获取数据的服务代码
const qb = getRepository(LeaveEntity)
.createQueryBuilder("leave")
.skip(size * (page - 1))
.take(size)
.orderBy('leave.created_at', orderBy)
.leftJoinAndSelect("leave.approvedBy", "users")
.leftJoinAndSelect("leave.user", "users")
.select(['leave', 'users.email', 'users.id', 'users.firstName', 'users.lastName'])
const [items, total] = await qb.getManyAndCount();
return {items, total, page: +page, totalPages: Math.ceil(total/size)}
解决方案
因为您将其命名为相同,所以请查看您的查询生成器:
.leftJoinAndSelect("leave.approvedBy", "users")
.leftJoinAndSelect("leave.user", "users")
所以最后你的查询会像这样结束:
SELECT * FROM leave LEFT JOIN users AS users LEFT JOIN users AS users ...
要解决这个问题,您必须将其命名为不同的,fe:
.leftJoinAndSelect("leave.approvedBy", "apu") // as an approved users
.leftJoinAndSelect("leave.user", "users")
然后apu.
在查询的其余部分使用您的前缀
推荐阅读
- elasticsearch - 我必须手动运行翻转以使新文档转到新索引
- mysql - Mysql:无论数字的位置如何,都对数字进行分组
- node.js - 在 dynamodb 上进行删除、更新、插入和获取操作嵌套 json 数据结构
- python - 如何在 selenium 中选择没有 ID/text_link/name 的元素?
- intellij-idea - 删除 IntelliJ 中的文件夹而不添加到 Git 暂存区?
- python - 当鼠标经过另一个按钮时如何显示按钮
- javascript - javascript || 使用变量而不是字符串的 classList 之后停止的条件
- c# - 使用 c# 和 Unity 在 csv 文件的下一列中写入
- angular - 有没有办法改变 ngx 图表中参考线的颜色?
- linux - Linux 上的 PowerShell 7,使用证书对 Azure 进行身份验证