使用knex对3张表进行join操作
Performing join operation on 3 tables using knex
我有一个 SQL 查询,它在 2 table 秒上执行 innerJoin
操作。
Table 1: user
Table 2: local_auth
查询returns所有基于user_id
键的匹配行
async getUser(id) {
return camelizeKeys(
await knex
.select(
'u.id',
'u.first_name',
'u.last_name',
'u.username',
'u.image_url',
'u.is_admin',
'u.phone',
'u.info',
'la.email'
)
.from('user AS u')
.leftJoin('local_auth AS la', 'la.user_id', 'u.id')
.where('u.id', '=', id)
.first()
);
}
现在,我要做的是修改上面的查询,使其在 3 table 秒内执行连接操作。
Table3:customer_user
还有一个名为 customer_user
的 table,它的外键之一是 user_id
。我如何根据 user_id
从 customer_user
table 中检索一些字段。我想执行这样的操作(但是由于使用 knex 执行多个连接的方式不正确,以下当然不会起作用)
async getUser(id) {
return camelizeKeys(
await knex
.select(
'u.id',
'u.first_name',
'u.last_name',
'u.username',
'u.image_url',
'u.is_admin',
'u.phone',
'u.info',
'la.email',
'cu.customer_id',
'cu.department_id'
)
.from('user AS u')
.leftJoin('local_auth AS la', 'la.user_id', 'u.id')
.leftJoin('customer_user AS cu', 'cu.user_id', 'u.id')
.where('u.id', '=', id)
.first()
);
}
注意:由于在 SO 上添加 table
标记的限制,我附上了屏幕截图。
实际上,查询工作得很好。由于语法错误,我无法执行它
async getUser(id) {
return camelizeKeys(
await knex
.select(
'u.id',
'u.first_name',
'u.last_name',
'u.username',
'u.image_url',
'u.is_admin',
'u.phone',
'u.info',
'la.email',
'cu.customer_id',
'cu.department_id'
)
.from('user AS u')
.leftJoin('local_auth AS la', 'la.user_id', 'u.id')
.leftJoin('customer_user AS cu', 'cu.user_id', 'u.id')
.where('u.id', '=', id)
.first()
);
}
我有一个 SQL 查询,它在 2 table 秒上执行 innerJoin
操作。
Table 1: user
Table 2: local_auth
查询returns所有基于user_id
键的匹配行
async getUser(id) {
return camelizeKeys(
await knex
.select(
'u.id',
'u.first_name',
'u.last_name',
'u.username',
'u.image_url',
'u.is_admin',
'u.phone',
'u.info',
'la.email'
)
.from('user AS u')
.leftJoin('local_auth AS la', 'la.user_id', 'u.id')
.where('u.id', '=', id)
.first()
);
}
现在,我要做的是修改上面的查询,使其在 3 table 秒内执行连接操作。
Table3:customer_user
还有一个名为 customer_user
的 table,它的外键之一是 user_id
。我如何根据 user_id
从 customer_user
table 中检索一些字段。我想执行这样的操作(但是由于使用 knex 执行多个连接的方式不正确,以下当然不会起作用)
async getUser(id) {
return camelizeKeys(
await knex
.select(
'u.id',
'u.first_name',
'u.last_name',
'u.username',
'u.image_url',
'u.is_admin',
'u.phone',
'u.info',
'la.email',
'cu.customer_id',
'cu.department_id'
)
.from('user AS u')
.leftJoin('local_auth AS la', 'la.user_id', 'u.id')
.leftJoin('customer_user AS cu', 'cu.user_id', 'u.id')
.where('u.id', '=', id)
.first()
);
}
注意:由于在 SO 上添加 table
标记的限制,我附上了屏幕截图。
实际上,查询工作得很好。由于语法错误,我无法执行它
async getUser(id) {
return camelizeKeys(
await knex
.select(
'u.id',
'u.first_name',
'u.last_name',
'u.username',
'u.image_url',
'u.is_admin',
'u.phone',
'u.info',
'la.email',
'cu.customer_id',
'cu.department_id'
)
.from('user AS u')
.leftJoin('local_auth AS la', 'la.user_id', 'u.id')
.leftJoin('customer_user AS cu', 'cu.user_id', 'u.id')
.where('u.id', '=', id)
.first()
);
}