2017-08-09 37 views
0

我需要将2个表中的值插入到一个表中。 在这张表中,我需要为另一个表中的一列中的主药和其他药物分配ID。 因此,所有列将来自一个表(d_temp_drugs)和初级和其他药物只有ID将来自其他表(unique_drugs_drug_id)将值插入配置单元表中时出错

我使用加入了这一点,并得到错误“错误在编译时声明:失败:SemanticException [错误10007]:_u1-subquery1中的歧义列参考drug_id“

下面是我用来创建表并在其中插入值的代码。请提出一个解决办法。

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 

回答

0

试试这个:

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

收到此错误:编译语句时出错:FAILED:ParseException行11:0在'insert'附近缺少EOF')' – Vaibhav

+0

我看到...忘了添加“;”创建表之后,现在应该可以 – Jenny

0

请试试这个,你是相当接近你引用的SUBQUERY表中的最后SELECT这引发错误

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 
相关问题