2010-01-18 50 views
2

我想这个代码从Oracle转换:甲骨文语法帮助的Postgres

CREATE VIEW PLANNED AS 
SELECT ASP.ASP_SPACE_NM, 
     SUM(MO.MO_TKR_TOTAL_OFF_SCHEDULED) "TOTAL_PLANNED" 
    FROM OBJECTIVE MO, SPACE ASP 
WHERE ASP.ASP_SPACE_NM = MO.ASP_SPACE_NM (+) 
    AND MO.MO_MSN_CLASS_NM = 'EPIC' 
GROUP BY ASP.ASP_SPACE_NM 

要Postgres的。

两条线在这混淆了我:

SUM(MO.MO_TKR_TOTAL_OFF_SCHEDULED) "TOTAL_PLANNED" 

这是一样的吗?

SUM(MO.MO_TKR_TOTAL_OFF_SCHEDULED) AS TOTAL_PLANNED 

而且我不知道在这条线是什么(+)表示:

WHERE ASP.ASP_SPACE_NM = MO.ASP_SPACE_NM (+) 

回答

2

这是老同学,甲骨文具体LEFT JOIN语法。你要替换它:

CREATE VIEW PLANNED AS 
    SELECT s.asp_space_nm, 
      SUM(o.mo_tkr_total_off_scheduled) 'total_planned' 
    FROM SPACE s 
LEFT JOIN OBJECTIVE o ON o.asp_space_nm = s.asp_space_nm 
        AND o.mo_msn_class_nm = 'EPIC' 
GROUP BY s.asp_space_nm 

参考:

2

+表示(编辑:左)外连接。

而且

SUM(MO.MO_TKR_TOTAL_OFF_SCHEDULED) "TOTAL_PLANNED" 

确实很可能等同于

SUM(MO.MO_TKR_TOTAL_OFF_SCHEDULED) as "TOTAL_PLANNED" 

如果我没有记错as是不是真的需要在PostgreSQL中,以及(尽管它使得在我看来,很多更明确)。

您可以在Postgresql wiki上的以下页面查看更多的差异:Oracle to Postgres conversion

+1

左连接 - 你可以有右外连接... – 2010-01-18 20:06:39

+0

正确,我会相应地更新答案。 – ChristopheD 2010-01-18 20:07:26