如何在多个JOIN中加入列

时间:2017-10-27 18:42:24

标签: sql hadoop join

我正在尝试连接多个表(总共11个表)并希望将Case_Id列合并为最终的连接结果。

帐户可以是主要保险,二级保险和/或两者兼而有之。

当我运行以下查询时,我只从JOIN“k”获得Case_Id。如何从JOIN“k”和“l”查询获取Case_Id?我正在使用Claudera Hadoop。

例如,我有以下简化版本:

    SELECT DISTINCT a1.id AS Account_Id,
    k.Case_Id,
    k.Primary_Insurance_Payer_Name,
    l.Secondary_Insurance_Payer_Name
    FROM account a1 left outer JOIN  
    (
      SELECT k3.Name AS Primary_Insurance_Payer_Name,
      k3.Id AS Account_Id,
      k4.Id as Case_Id
      FROM patient k1
      JOIN patient_insurance k2
      ON k1.A360_Primary_Insurance__c=k2.Id
      JOIN account k3
      ON k2.A360_Payer__c=k3.Id
      left outer join pep_case k4
      on k4.enrolled_patient__c=k1.id     
    ) k ON a1.id=k.Account_Id left outer JOIN 
    (
      SELECT l3.Name AS Secondary_Insurance_Payer_Name,
      l3.Id AS Account_Id,
      l4.Id as Case_Id
      FROM patient l1
      JOIN patient_insurance l2
      ON l1.A360_Secondary_Insurance__c=l2.Id
      JOIN account l3
      ON l2.A360_Payer__c=l3.Id
      left outer join pep_case l4
      on l4.enrolled_patient__c=l1.id) l ON a1.id=l.Account_Id 

1 个答案:

答案 0 :(得分:0)

执行类似于处理保险付款人名称的方法,在子查询中为它们提供不同的别名,然后引用最终选择条款中的那些

SELECT DISTINCT
      a1.id AS Account_Id
    , k.k_Case_Id
    , l.l_Case_Id
    , k.Primary_Insurance_Payer_Name
    , l.Secondary_Insurance_Payer_Name
FROM account a1
LEFT OUTER JOIN (
      SELECT
            k3.Name AS Primary_Insurance_Payer_Name
          , k3.Id   AS Account_Id
          , k4.Id   AS k_Case_Id
      FROM patient k1
      JOIN patient_insurance k2 ON k1.A360_Primary_Insurance__c = k2.Id
      JOIN account k3 ON k2.A360_Payer__c = k3.Id
      LEFT OUTER JOIN pep_case k4 ON k4.enrolled_patient__c = k1.id
) k ON a1.id = k.Account_Id
LEFT OUTER JOIN (
      SELECT
            l3.Name AS Secondary_Insurance_Payer_Name
          , l3.Id   AS Account_Id
          , l4.Id   AS l_Case_Id
      FROM patient l1
      JOIN patient_insurance l2 ON l1.A360_Secondary_Insurance__c = l2.Id
      JOIN account l3 ON l2.A360_Payer__c = l3.Id
      LEFT OUTER JOIN pep_case l4 ON l4.enrolled_patient__c = l1.id
) l ON a1.id = l.Account_Id
WHERE k_Case_Id  = l_Case_Id

修改

连接保险信息两次的单个选择查询(请参阅别名ppi和spi)可能有效。 nb:我还将联接从patient更改为pep_case到内部联接。

SELECT
      pac.Name AS Primary_Insurance_Payer_Name
    , sac.Name AS Secondary_Insurance_Payer_Name
    , pac.Id   AS Account_Id
    , pc.Id    AS Case_Id
FROM patient p
INNER JOIN pep_case pc           ON p.id = pc.enrolled_patient__c
INNER JOIN patient_insurance ppi ON p.A360_Primary_Insurance__c = ppi.Id
INNER JOIN account pac           ON ppi.A360_Payer__c = pac.Id
LEFT  JOIN patient_insurance spi ON p.A360_Secondary_Insurance__c = spi.Id
LEFT  JOIN account sac           ON spi.A360_Payer__c = sac.Id