2015-04-29 60 views
5

我正在將客戶端的軟件數據庫從Oracle遷移到PostgreSQL,並且在理解查詢,查詢,以及如何遷移它方面遇到一些麻煩。Oracle的OUTER JOIN(+)在字符串上 - 遷移PostgreSQL

查詢是:

SELECT * 
FROM TBL1, TBL2, TBL3, TBL4 
WHERE TBL3.Project_ID = TBL1.Project_ID 
AND TBL2.Type_ID = TBL1.Type_ID 
AND TBL4.PROPERTY_NAME(+)='Id' 
AND TBL4.Entity_ID(+)=TBL1.Entity_ID 

而且我不明白的部分,是外部聯接(+)上的 'ID'。 表上的連接,確定,但在一個字符串上?我不知道它的作用。

有人有想法嗎? 謝謝。

+0

http://stackoverflow.com/a/4020794/3682599 –

回答

4

TBL4.PROPERTY_NAME(+)='Id'指當行被內加入,則該值必須是「ID」,但是當被外剛入行,評估條件爲真

但是你應該重寫聲明標準爲:

SELECT * 
FROM TBL1 
JOIN TBL2 ON TBL2.Type_ID = TBL1.Type_ID 
JOIN TBL3 ON TBL3.Project_ID = TBL1.Project_ID 
LEFT JOIN TBL4 ON TBL4.Entity_ID=TBL1.Entity_ID AND TBL4.PROPERTY_NAME='Id' 
1

這是下面的查詢使用ANSI聯接語法相當於:

SELECT * 
FROM TBL1 t1 
INNER JOIN TBL2 t2 ON (t1.Type_ID = t2.Type_ID) 
INNER JOIN TBL3 t3 ON (t3.Project_ID = t1.Project_ID) 
LEFT JOIN TBL4 t4 ON (t4.Entity_ID = t1.Entity_ID AND t4.PROPERTY_NAME = 'Id') 

你不加入一個字符串,僅指定連接這是基於一個條件。