我需要帮助将Union中编写的SQL查询重写为JOIN

我需要帮助将Union中编写的SQL查询重写为JOIN,sql,oracle,Sql,Oracle,这就是问题所在 SELECT FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM FROM DBSYSTP.FP_FUND_DESC a, DBSYSTC.funddesc b WHERE a.FD_ACTIVE_CD = 1 AND a.FD_DESC_CD = b.FD_DESCR_CODE AND a.FD_GROUP_CD = 'OF' AND FD_STYLE_

这就是问题所在

SELECT
    FD_DESC_CD, 
    FD_NM, 
    FD_CUSIP_CD, 
    NASDAQ_SYM 
FROM 
    DBSYSTP.FP_FUND_DESC a, DBSYSTC.funddesc b 
WHERE 
    a.FD_ACTIVE_CD = 1 
    AND a.FD_DESC_CD = b.FD_DESCR_CODE 
    AND a.FD_GROUP_CD = 'OF' 
    AND FD_STYLE_C <> 11 
    AND a.OUTSIDE_FD_TYPE_CD IN ('LIP','NFIA','NFPA')  
    AND (a.FD_DESC_CD NOT IN ('Y3RN','N699')) 

UNION 

SELECT 
    FD_DESC_CD, 
    FD_NM, 
    FD_CUSIP_CD, 
    NASDAQ_SYM 
FROM 
    DBSYSTP.FP_FUND_DESC a, DBSYSTT.funddesc b 
WHERE
    a.FD_ACTIVE_CD = 1 
    AND a.FD_DESC_CD = b.FD_DESCR_CODE 
    AND a.FD_GROUP_CD = 'OF' 
    AND FD_STYLE_C <> 11 
    AND a.OUTSIDE_FD_TYPE_CD IN ('LIP','NFIA','NFPA')  
    AND (a.FD_DESC_CD NOT IN ('Y3RN','N699')) 

UNION 

SELECT 
    FD_DESC_CD, 
    FD_NM, 
    FD_CUSIP_CD, 
    NASDAQ_SYM 
FROM 
    DBSYSTP.FP_FUND_DESC a, DBSYSTI.funddesc b 
WHERE 
    a.FD_ACTIVE_CD = 1 
    AND a.FD_DESC_CD = b.FD_DESCR_CODE 
    AND a.FD_GROUP_CD = 'OF' 
    AND FD_STYLE_C <> 11 
    AND a.OUTSIDE_FD_TYPE_CD IN ('LIP','NFIA','NFPA')  
    AND (a.FD_DESC_CD NOT IN ('Y3RN','N699')) 

您可以使用子查询并联接它们

     with t1 as
        (
         Select FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM from DBSYSTP.FP_FUND_DESC a, DBSYSTC.funddesc b WHERE a.FD_ACTIVE_CD = 1 and a.FD_DESC_CD = b.FD_DESCR_CODE and a.FD_GROUP_CD = 'OF' and FD_STYLE_C <> 11 and a.OUTSIDE_FD_TYPE_CD in ('LIP','NFIA','NFPA')  and (a.FD_DESC_CD not in ('Y3RN','N699')) 
        ), t2 as
        ( 
          Select FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM from DBSYSTP.FP_FUND_DESC a, DBSYSTT.funddesc b WHERE a.FD_ACTIVE_CD = 1 and a.FD_DESC_CD = b.FD_DESCR_CODE and a.FD_GROUP_CD = 'OF' and FD_STYLE_C <> 11 and a.OUTSIDE_FD_TYPE_CD in ('LIP','NFIA','NFPA')  and (a.FD_DESC_CD not in ('Y3RN','N699')) 

        ) , 
     t3 as (    
    Select FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM from DBSYSTP.FP_FUND_DESC a, DBSYSTI.funddesc b WHERE a.FD_ACTIVE_CD = 1 and a.FD_DESC_CD = b.FD_DESCR_CODE and a.FD_GROUP_CD = 'OF' and FD_STYLE_C <> 11 and a.OUTSIDE_FD_TYPE_CD in ('LIP','NFIA','NFPA')  and (a.FD_DESC_CD not in ('Y3RN','N699'))
        ) 
select t1.*,t2.*,t3.* from t1 join t2 on t1.FD_DESC_CD=t2.FD_DESC_CD
          join t3 on t1.FD_DESC_CD=t3.FD_DESC_CD

三个选择是否都相同?请提供样本数据和所需结果。是的,这三个表是相同的。只有模式不同。您确定任务不是消除UNION,而是用正确的联接语法替换tab1 a、tab2 b中的吗?但我需要的结果应该如下所示。。FD_DESC_CD FD_NM FD_CUSIP_CD NASDAQ_SYM CC07贝莱德流动性09248U718 EIIPX CC12 Invesco American特许经营权R5 00141A446 GSTIX CC15 J.P.摩根美国房地产R5 4812C2577 EIIGXHi Filburt,我已经按照我预期的方式用结果集更新了问题。
     with t1 as
        (
         Select FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM from DBSYSTP.FP_FUND_DESC a, DBSYSTC.funddesc b WHERE a.FD_ACTIVE_CD = 1 and a.FD_DESC_CD = b.FD_DESCR_CODE and a.FD_GROUP_CD = 'OF' and FD_STYLE_C <> 11 and a.OUTSIDE_FD_TYPE_CD in ('LIP','NFIA','NFPA')  and (a.FD_DESC_CD not in ('Y3RN','N699')) 
        ), t2 as
        ( 
          Select FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM from DBSYSTP.FP_FUND_DESC a, DBSYSTT.funddesc b WHERE a.FD_ACTIVE_CD = 1 and a.FD_DESC_CD = b.FD_DESCR_CODE and a.FD_GROUP_CD = 'OF' and FD_STYLE_C <> 11 and a.OUTSIDE_FD_TYPE_CD in ('LIP','NFIA','NFPA')  and (a.FD_DESC_CD not in ('Y3RN','N699')) 

        ) , 
     t3 as (    
    Select FD_DESC_CD, FD_NM, FD_CUSIP_CD, NASDAQ_SYM from DBSYSTP.FP_FUND_DESC a, DBSYSTI.funddesc b WHERE a.FD_ACTIVE_CD = 1 and a.FD_DESC_CD = b.FD_DESCR_CODE and a.FD_GROUP_CD = 'OF' and FD_STYLE_C <> 11 and a.OUTSIDE_FD_TYPE_CD in ('LIP','NFIA','NFPA')  and (a.FD_DESC_CD not in ('Y3RN','N699'))
        ) 
select t1.*,t2.*,t3.* from t1 join t2 on t1.FD_DESC_CD=t2.FD_DESC_CD
          join t3 on t1.FD_DESC_CD=t3.FD_DESC_CD