回答

收藏

复杂的左外部加入Oracle,转换为PostgreSQL

技术问答 技术问答 55 人阅读 | 0 人回复 | 2023-09-13

我有一个来自Oracle   SAS环境的巨大SQL语句。我得到了大部分,但最让我困惑的是WHERE子句中的Left Outer Joins
. J2 t4 Y! q: H7 {: s" \/加号。我需要把它转换成Postgres。我可以处理代码的第一部分,这是使我感到困惑的联接。3 L% q. l0 p! c. u0 N5 @5 w0 P
SELECT--A bunch of columns from several tablesFROM prd_acct_cmp_grp pacg,   product_acct pa,   customer_acct ca,   (SELECT DISTINCT member_id,group_id     FROM group_members     WHERE group_id IN gm,   prd_acct_acct_cmp pac,   pacg_usage pu,   sales_hierarchy sh,   sales_region srWHERE pacg.component_group_cd = 'AN'  AND pacg.component_grp_val IN (%s) --string that is added in later  AND pacg.product_account_id = pa.product_account_id  AND pa.customer_acct_id = ca.customer_acct_id  AND ca.customer_acct_id = gm.member_id( )  AND pacg.product_account_id = pac.product_account_id  AND pacg.occurencce_number = pac.occurence_number  AND pac.prcmp_code = 'USAGE'  AND pacg.component_group_cd = pu.component_group_cd( )  AND pacg.component_grp_val = pu.component_grp_val( )  AND ca.primary_sales_rep = sh.sales_rep_id( )  AND sh.region_cd = sr.sales_region_code( )我知道从Oracle如何在转换过程中进行简单的连接,但连接中有许多相同表的例子,混合了许多不需要连接的条件。那么如何连接它呢?句子的结尾需要其他的吗?WHERE子句?
& y( l; I# S0 @: v谢谢。
$ J" X( \& o5 |: \% i" E                                                                9 r$ L! g1 t7 o% E- N1 p
    解决方案:                                                               
- }3 Q+ D+ [0 M" [) V+ S7 ?; |                                                                试试这个:' P: X3 b7 \7 O. [. f
SELECT--A bunch of columns from several tablesFROM prd_acct_cmp_grp pacgJOIN product_acct pa  ON pacg.product_account_id = pa.product_account_idJOIN customer_acct ca  ON pa.customer_acct_id = ca.customer_acct_idJOIN prd_acct_acct_cmp pac  ON pacg.product_account_id = pac.product_account_id AND pacg.occurencce_number = pac.occurence_number AND pac.prcmp_code = 'USAGE'LEFT JOIN (SELECT DISTINCT member_id,group_id           FROM group_members           WHERE group_id IN gm  ON ca.customer_acct_id = gm.member_idLEFT JOIN sales_hierarchy sh  ON ca.primary_sales_rep = sh.sales_rep_idLEFT JOIN sales_region sr  ON sh.region_cd = sr.sales_region_codeLEFT JOIN pacg_usage pu    ON pacg.component_group_cd = pu.component_group_cd AND pacg.component_grp_val = pu.component_grp_valWHERE pacg.component_group_cd = 'AN'  AND pacg.component_grp_val IN (%s) --string that is added in later
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则