gpt4 book ai didi

sql - 如何使用 TypeORM 创建这个 ViewEntity?

转载 作者:行者123 更新时间:2023-12-04 16:58:41 25 4
gpt4 key购买 nike

假设我正在构建一个有 4 个表的地址簿:user , contact , friend , 和 stranger .
contact是连接表userfriendstranger表。它的结构如下:

╔════╦═════════╦═══════════╦═════════════╗
║ id ║ user_id ║ friend_id ║ stranger_id ║
╠════╬═════════╬═══════════╬═════════════╣
║ 1 ║ 1 ║ 5 ║ NULL ║
╠════╬═════════╬═══════════╬═════════════╣
║ 2 ║ 1 ║ NULL ║ 65 ║
╠════╬═════════╬═══════════╬═════════════╣
║ 3 ║ 1 ║ 87 ║ NULL ║
╚════╩═════════╩═══════════╩═════════════╝

我想创建一个如下所示的 View :
╔════╦═════════╦═══════════╦═════════════╦══════════════╗
║ id ║ user_id ║ friend_id ║ stranger_id ║ contact_name ║
╠════╬═════════╬═══════════╬═════════════╬══════════════╣
║ 1 ║ 1 ║ 5 ║ NULL ║ Barry ║
╠════╬═════════╬═══════════╬═════════════╬══════════════╣
║ 2 ║ 1 ║ NULL ║ 65 ║ Gary ║
╠════╬═════════╬═══════════╬═════════════╬══════════════╣
║ 3 ║ 1 ║ 87 ║ NULL ║ Larry ║
╚════╩═════════╩═══════════╩═════════════╩══════════════╝

也就是说,我想要一个可以使用 user_id 查询的 View 并通过 name 获取该用户的所有联系人列表两者通用的列 friendstranger表。

理想情况下,我想使用 TypeORM 来实现它,但只知道它的正确 SQL 也会有所帮助。

最佳答案

尝试定义一个 ViewEntitycontacts 之间执行左连接, friendsstranger table 。结果行然后将映射到 ContactWithName对象,由此一个新字段 contact_name添加了哪个 concats name栏目friendsstranger表( NULL 字段将被忽略)。

@ViewEntity({
expression: (connection: Connection) => connection.createQueryBuilder(Contact, "contact")
.select ('contact.id', 'id')
.addSelect('contact.user_id', 'user_id')
.addSelect('contact.friend_id', 'friend_id')
.addSelect('contact.stranger_id', 'stranger_id')
.addSelect('CONCAT(friend.name, stranger.name)', 'contact_name')
.leftJoin (Friend, "friend") // friend table
.leftJoin (Stranger, "stranger") // stranger table
})
export class ContactWithName {

@ViewColumn()
id: number;

@ViewColumn()
user_id: number;

@ViewColumn()
friend_id: number;

@ViewColumn()
stranger_id: number;

@ViewColumn()
contact_name: string;

}

然后,您可以照常查询结果集: getRepository(ContactWithName).find(...)

关于sql - 如何使用 TypeORM 创建这个 ViewEntity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59448115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com