该代码中的字段如何与不同的名称结合?

时间:2019-05-15 15:55:51

标签: sql oracle

即使列名不同,该代码如何合并?没关系吗?在子选择中。谢谢

select Distinct AD.MEME_CK
      ,MECD_EFF_DT as EFF_DT
      ,MECD_MCTR_AIDC AS PG_DESC
    from fac.CMC_MECD_MEDICAID AD
    INNER JOIN FAC.CMC_MEME_MEMBER ME
      ON ME.MEME_CK = AD.MEME_CK
    INNER JOIN FAC.CMC_GRGR_GROUP GR
      ON GR.GRGR_CK=ME.GRGR_CK
    INNER JOIN fac.CMC_MCTR_CD_TRANS TR
    ON TR.MCTR_VALUE=MECD_MCTR_AIDC
    AND MCTR_ENTITY='MDAG' AND  MCTR_TYPE='AIDC'
    where ((MECD_MCTR_AIDC IN ('DE8T', 'DEPB', 'DEPC', 'DEPD', 'DEPE', 'DEPF', 'DEPL', 'DEPS', 'DEPT','DEX3','DE8T'))
    or (UPPER(MCTR_DESC) LIKE '%PREG%' and MECD_EFF_DT > sysdate-30 AND GR.CICI_ID IN ('OK','NC','FL','CA')))
      AND sysdate BETWEEN MECD_EFF_DT AND MECD_TERM_DT 






    UNION
/*Member Heatlh Detail Table*/
    select Distinct MEME_CK
    ,MEHE_LAST_DT
    ,MEHE_IPCD_ID
    from fac.CMC_MEHE_HEALTH_DETL D
    WHERE ((MEHE_IPCD_ID IN ('PDRN', 'PRED','PRET','PREG','TAPG') AND MEHE_LAST_DT>sysdate-30)
                 OR (UPPER(MEHE_COMMENT) LIKE '%PREG%' AND MEHE_LAST_DT>sysdate-30)
                 or (MEHE_IPCD_ID='EDOB' and MEHE_LAST_DT>sysdate)
                 or (MEHE_IPCD_ID='LATC' AND substr(MEHE_COMMENT,1,4) IN ('013-','053-','104-','127-') AND MEHE_LAST_DT>sysdate-30))

1 个答案:

答案 0 :(得分:2)

不,没关系。 From the documentation

  

复合查询的组件查询的选择列表中的相应表达式必须在数量上匹配,并且必须位于相同的数据类型组(例如数字或字符)中。

它们不必具有相同的名称-这并不重要。对于最终的预测,Oracle使用第一个分支的表达式名称/别名。您完全不必为后续分支指定别名。因此,可以执行以下操作:

select 42 as some_col from dual
union all
select 5/7 from dual;

  SOME_COL
----------
        42
.714285714

from the docs(添加了重点):

  

集合运算符将两个SELECT语句返回的行合并为一个结果。每个组件查询选择的列的数量和数据类型必须相同,但列长度可以不同。 结果集中的列名称是集合运算符之前的选择列表中表达式的名称。

其中“在集合操作符之前的选择列表中的表达式的名称”表示在select之前的第一个union –我称为第一个分支。