2017-03-27 2 views
1

Ich versuche, zwei Tabellen, eine Pläne Tabelle und eine Plan_Details Tabelle zu verbinden. Im Folgenden finden Sie zwei Beispiele dafür, wie die Tabellen aussehen.WHERE-Anweisung mit doppelten Spaltennamen über JOIN - PostgreSQL

PLäNE Tabelle

+---------+------+-----------+ 
| user_id | plan | is_active | 
+---------+------+-----------+ 
| 1  | 10 | true | 
| 1  | 11 | false | 
| 2  | 11 | true | 

PLAN_DETAILS Tabelle

+---------+------+-------+-----------+ 
| plan_id | cost | price | is_active | 
+---------+------+-------+-----------+ 
| 10  | 19 | 199 | true | 
| 11  | 13 | 149 | true | 

Ich will nur nur den aktiven Plan ziehen und der Preis kostete jeden Benutzer verwendet. Gerade jetzt, meine Knex Aussage ist:

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

Nun, wenn ich die is_active: 'true' halten dort dann bekomme ich eine Unhandled rejection error: column reference "is_active" is ambiguous. Wenn ich den is_active-Teil herausnehme, dann bekomme ich Informationen für beide Pläne, die auf den Benutzer verweisen, obwohl ich nur die Information haben möchte, welche Pläne für den Benutzer aktiv sind.

Wie bekomme ich nur die aktiven Pläne für einen Benutzer? Ich verwende KNEX.JS als mein ORM, aber ich bin auch glücklich, Raw SQL dafür zu verwenden.

Antwort

0

SQL würde ähnlich sein:

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

Mit Knex sollte dies tun:

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