【发布时间】:2015-06-30 18:05:31
【问题描述】:
我有这个庞大的 SQL 语句,来自 Oracle+SAS 环境。我得到了大部分内容,但最让我困惑的是 WHERE 子句中的左外连接/加号。我需要将其转换为 Postgres。我可以处理代码的第一部分,让我感到困惑的是连接。
SELECT
--A bunch of columns from several tables
FROM prd_acct_cmp_grp pacg,
product_acct pa,
customer_acct ca,
(SELECT DISTINCT member_id, group_id
FROM group_members
WHERE group_id IN (33158, 27156, 35376, 36217)) gm,
prd_acct_acct_cmp pac,
pacg_usage pu,
sales_hierarchy sh,
sales_region sr
WHERE 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 子句吗?
谢谢。
【问题讨论】:
-
内联是你的朋友。 FROM prd_acct_cmp_grp pacg 内部连接 product_acct pa ON pacg.product_account_id = pa.product_account_id。等等...
-
@Chuck:里面有一些左连接。这就是让它变得更加复杂的原因。
-
是的,使用 (+) 的地方是左外连接
标签: sql oracle postgresql join