Sql 检索具有重复外键的联接表的两个不同字段

Sql 检索具有重复外键的联接表的两个不同字段,sql,join,oracle10g,foreign-keys,Sql,Join,Oracle10g,Foreign Keys,我有一个重用外键的表,我想为每种情况加入不同的值。第一个表描述了药物剂量活动。它有指向毒品、路线、车辆等的ID。。。令人困惑的是,它重用了单元ID,它是单个描述表中的外键 分组(简化) 单位(简化) 我想生成一个查询,为所有组的每个药物剂量返回一行。除了单位,我什么都能做。我想使用CASE语句来显示剂量单位。select语句如下所示: 'DOSE UNITS' = CASE WHEN CHECK_UNIT IS NULL THEN DRUG_UNIT_DESCR ELSE CONCAT(DRUG

我有一个重用外键的表,我想为每种情况加入不同的值。第一个表描述了药物剂量活动。它有指向毒品、路线、车辆等的ID。。。令人困惑的是,它重用了单元ID,它是单个描述表中的外键

分组(简化)

单位(简化)

我想生成一个查询,为所有组的每个药物剂量返回一行。除了单位,我什么都能做。我想使用CASE语句来显示剂量单位。select语句如下所示:

'DOSE UNITS' =
CASE
WHEN CHECK_UNIT IS NULL THEN DRUG_UNIT_DESCR
ELSE CONCAT(DRUG_UNIT_DESCR+'/'+CHECK_UNIT_DESCR)
END
我试图让结果看起来像这个例子:

结果

GROUP_NO      DRUG          DRUG_AMOUNT     'DOSE UNITS'
    1       HelpsAlot           5              mg/kg
    2       HelpsMore           1              mg/kg
    2       HelpsAlot           5              mg/kg
    3       DoesNothing         0.5            mL
    4       WhoKnows            10             mL/kg

谢谢您的帮助。

您需要两个连接,每个键一个:

select g.*,
       'DOSE UNITS' = (CASE WHEN CHECK_UNIT IS NULL THEN du.UNIT_DESCR
                            ELSE CONCAT(du.UNIT_DESCR+'/'+cu.UNIT_DESCR)
                       END) 
from groups g left outer join
     units cu
     on g.check_unit_id = cu.unit_id left outer join
     units du
     on g.drug_unit_id = du.unit_id

假设毒品单位总是有人居住

select group_no, drug, drug_amount, 
'dose units' =
case
when check_unit is null then u1.unit_descr
else concat(u1.unit_descr+'/'+ u2.unit_descr)
end
from groups g inner join units u1
on g.drug_unit = u1.unit_id
left join units u2 
on g.check_unit = u2.unit_id

组!!!我怎么能忘记团体!!!仍然是SQL的障碍。我要试一试。
select g.*,
       'DOSE UNITS' = (CASE WHEN CHECK_UNIT IS NULL THEN du.UNIT_DESCR
                            ELSE CONCAT(du.UNIT_DESCR+'/'+cu.UNIT_DESCR)
                       END) 
from groups g left outer join
     units cu
     on g.check_unit_id = cu.unit_id left outer join
     units du
     on g.drug_unit_id = du.unit_id
select group_no, drug, drug_amount, 
'dose units' =
case
when check_unit is null then u1.unit_descr
else concat(u1.unit_descr+'/'+ u2.unit_descr)
end
from groups g inner join units u1
on g.drug_unit = u1.unit_id
left join units u2 
on g.check_unit = u2.unit_id