2017-03-27 8 views
1

私は2つのテーブル、計画テーブルとplan_detailsテーブルに参加しようとしています。以下は、テーブルの外観の2つの例です。- PostgreSQLの

PLANS表

+---------+------+-----------+ 
| 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文は次のとおりです。私はそこにis_active: 'true'を続ければ

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); 
    }); 

は今、私はUnhandled rejection error: column reference "is_active" is ambiguousを取得します。私がis_active部分を取り除くと、ユーザーに対してどのプランがアクティブであるかに関する情報だけが必要な場合でも、ユーザーを参照する両方のプランの情報が得られます。

ユーザーのアクティブプランのみを取得するにはどうすればよいですか?私はORMとしてKNEX.JSを使用していますが、このために生のSQLも使用しています。

答えて

0

SQLは次のようになります。これを行う必要がありますknexで

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 
1

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); 
    });