我使用的是node.js typeorm,我有两个实体,它们之间的关系为1对0或1,如下所示:
@Entity('issuer')
export class Issuer {
@PrimaryGeneratedColumn()
issuerId: number
@OneToOne(() => User)
@JoinColumn({ name: 'userId' })
user: User
...remaining columns...
}
@Entity('user_data')
export class User {
@PrimaryGeneratedColumn()
id: number
@Column({ type: 'varchar', nullable: false, unique: true })
email: string
...remaining columns...
}
用户可以是或不是发行者,但发行者肯定是用户。
我试图实现的是,在不知道用户类型的情况下,我想连接2个表。例如,考虑以下数据库行:
User | id | email |
--------------------
user1 | 1 | xx@xx |
--------------------
user2 | 2 | yy@yy |
Issuer | issuerId | userId |
----------------------------
issuer1 | 1 | 1 |
当我查询电子邮件xx@xx
时,我想得到:
id: 1, email: xx@xx, issuerId: 1
当我查询电子邮件yy@yy
时,我想得到:
id: 2, email: yy@yy, issuerId: NULL
或者如果issuerId为NULL,则丢弃它也是可以的。
我尝试了以下查询:
SELECT *
FROM user_data
LEFT JOIN issuer ON issuer.userId = user_data.id
WHERE user_data.email = $1
其中$1是电子邮件参数,但我得到以下错误:
"severity": "ERROR",
"code": "42703",
"hint": "Perhaps you meant to reference the column \"issuer.userId\".",
"file": "parse_relation.c",
"routine": "errorMissingColumn"
我做错了什么,我能做些什么来实现我的目标?
1条答案
按热度按时间brgchamk1#
看起来在使用驼峰大小写列名时,应该用双引号括起来。另外,我应该使用LEFT OUTER JOIN而不是LEFT JOIN。
更正后的查询如下所示: