我正在尝试加入两个表,一个计划表和一个 plan_details 表。以下是表格的两个示例。
计划表
+---------+------+-----------+
| user_id | plan | is_active |
+---------+------+-----------+
| 1 | 10 | true |
| 1 | 11 | false |
| 2 | 11 | true |
PLAN_DETAILS表
+---------+------+-------+-----------+
| plan_id | cost | price | is_active |
+---------+------+-------+-----------+
| 10 | 19 | 199 | true |
| 11 | 13 | 149 | true |
我只想提取与每个用户相关的有效计划费用和价格。现在,我的knex声明是:
knex('plans')
.where({
user_id: 1,
is_active: 'true'
})
.select(
'plans.plan',
'plan_details.cost',
'plan_details.price'
)
.join('plan_details as plan_details', 'plan_details.plan_id', 'plans.plan')
.then(function (user_plan_id) {
console.log(user_plan_id);
});
现在,如果我将is_active: 'true'
保留在那里,那么我会得到一个Unhandled rejection error: column reference "is_active" is ambiguous
。如果我取出is_active部分,那么我就会获得引用该用户的两个计划的信息,即使我只想知道哪些计划对用户有效。
如何仅为用户获取有效计划?我使用KNEX.JS作为我的ORM,但我很乐意使用原始SQL。
答案 0 :(得分:1)
使用knex,应该这样做:
knex('plans')
.select(
'plans.plan',
'plan_details.cost',
'plan_details.price'
)
.join('plan_details as plan_details', 'plan_details.plan_id', 'plans.plan')
.where('plan.user_id', 1)
.where('plan.is_active', true)
.then(function (user_plan_id) {
console.log(user_plan_id);
});
答案 1 :(得分:0)
SQL类似于:
select
plans.plan,
plan_details.cost,
plan_details.price
from plan
join plan_details on plans.plan = plan_details.plan_id
where plan.is_active