2010-01-18 54 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