2017-08-09 1 views
0

Je dois insérer des valeurs de 2 tables dans une table. Dans ce tableau, j'ai besoin d'attribuer des ID pour les médicaments primaires et autres qui sont dans une colonne dans un autre tableau. Donc toutes les colonnes viennent d'une table (d_temp_drugs) et seuls les ID des principaux médicaments et autres proviendront d'autres la table (unique_drugs_drug_id)Erreur lors de l'insertion de valeurs dans la table de ruche

J'utilise joindre pour cela et obtenir l'erreur « erreur while compilation: failed: SemanticException [Erreur 10007]: Référence de colonne ambiguë drug_id dans _u1-subquery1 "

Ci-dessous le code que j'utilise pour créer une table et y insérer des valeurs. SVP suggérer un correctif.

create table study_drug_mapping 
(
    trial_identifier string, 
    cto_id int, 
    primary_drug string, 
    primary_drug_id int, 
    other_drug string, 
    other_drug_id int 
) 

insert into table study_drug_mapping (trial_identifier, cto_id, primary_drug, primary_drug_id, other_drug, other_drug_id) 
select d_temp_drugs.trial_identifier, d_temp_drugs.cto_id, d_temp_drugs.primary_drugs_sorted, unique_drugs_drug_id.drug_id, d_temp_drugs.other_drugs_sorted, unique_drugs_drug_id.drug_id 
from 
(
select d_temp_drugs.trial_identifier, d_temp_drugs.cto_id, d_temp_drugs.primary_drugs_sorted, drugs.drug_id, d_temp_drugs.other_drugs_sorted, drugs.drug_id 
from d_temp_drugs left join unique_drugs_drug_id drugs on d_temp_drugs.primary_drugs_sorted = drugs.unique_drug_name 
union 
select d_temp_drugs.trial_identifier, d_temp_drugs.cto_id, d_temp_drugs.primary_drugs_sorted, drugs.drug_id, d_temp_drugs.other_drugs_sorted, drugs.drug_id 
from d_temp_drugs left join unique_drugs_drug_id drugs on d_temp_drugs.other_drugs_sorted = unique_drugs_drug_id.unique_drug_name 
) a 

Répondre

0

essayez ceci:

create table study_drug_mapping 
(
    trial_identifier string, 
    cto_id int, 
    primary_drug string, 
    primary_drug_id int, 
    other_drug string, 
    other_drug_id int 
); 

insert into table study_drug_mapping 
select 
    trial_identifier, 
    cto_id, 
    primary_drugs_sorted, 
    drug_id, 
    other_drugs_sorted, 
    drug_id 
from 
(
select 
    d_temp_drugs.trial_identifier as trial_identifier, 
    d_temp_drugs.cto_id as cto_id, 
    d_temp_drugs.primary_drugs_sorted as primary_drugs_sorted, 
    drugs.drug_id as drug_id, 
    d_temp_drugs.other_drugs_sorted as other_drugs_sorted, 
    drugs.drug_id as drug_id 
from d_temp_drugs left join unique_drugs_drug_id drugs on (d_temp_drugs.primary_drugs_sorted = drugs.unique_drug_name) 
union 
select 
    d_temp_drugs.trial_identifier as trial_identifier, 
    d_temp_drugs.cto_id as cto_id, 
    d_temp_drugs.primary_drugs_sorted as primary_drugs_sorted, 
    drugs.drug_id as drug_id, 
    d_temp_drugs.other_drugs_sorted as other_drugs_sorted, 
    drugs.drug_id as drug_id 
from d_temp_drugs left join unique_drugs_drug_id drugs on (d_temp_drugs.other_drugs_sorted = unique_drugs_drug_id.unique_drug_name) 
)a 
+0

obtenir cette erreur : Erreur lors de la compilation de l'instruction: FAILED: ParseException ligne 11: 0 EOF manquant à 'insert' près de ')' – Vaibhav

+0

Je vois ... j'ai oublié d'ajouter ";" après créer la table, maintenant il devrait être OK – Jenny

0

S'il vous plaît donner à ce essayer, vous êtes à peu près, vous faites référence à la table SUBQUERY dans le SELECT final qui jette l'erreur

INSERT INTO TABLE study_drug_mapping (trial_identifier, cto_id, primary_drug, primary_drug_id, other_drug, other_drug_id) 
SELECT 
     A.trial_identifier, 
     A.cto_id, 
     A.primary_drugs_sorted, 
     A.drug_id, 
     A.other_drugs_sorted, 
     A.drug_id 
FROM 
(
SELECT 
     d_temp_drugs.trial_identifier, 
     d_temp_drugs.cto_id, 
     d_temp_drugs.primary_drugs_sorted, 
     drugs.drug_id, 
     d_temp_drugs.other_drugs_sorted, 
     drugs.drug_id 
FROM d_temp_drugs 
LEFT JOIN unique_drugs_drug_id drugs ON d_temp_drugs.primary_drugs_sorted = drugs.unique_drug_name 
UNION --Make use of UNION ALL incase you need all the data from both the SELECT statements 
SELECT 
     d_temp_drugs.trial_identifier, 
     d_temp_drugs.cto_id, 
     d_temp_drugs.primary_drugs_sorted, 
     drugs.drug_id, 
     d_temp_drugs.other_drugs_sorted, 
     drugs.drug_id 
FROM d_temp_drugs 
LEFT JOIN unique_drugs_drug_id drugs ON d_temp_drugs.other_drugs_sorted = unique_drugs_drug_id.unique_drug_name 
) A