2015-04-29 26 views
5

Sto migrando il database software di un client da Oracle a PostgreSQL, e ho qualche problema a capire una query, cosa fa e di conseguenza come migrarlo.Oracle OUTER JOIN (+) su stringa - Migrazione PostgreSQL

La query è:

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 

E la parte che non capisco, è il join esterno (+) su 'Id'. Un join su un tavolo, OK, ma su una stringa? Non ho idea di cosa faccia.

Qualcuno ha un'idea? Grazie.

+0

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

risposta

4

TBL4.PROPERTY_NAME(+)='Id' significa che quando la linea è stata interiore unito, allora il valore deve essere 'Id', ma quando la linea è stata esterno unito, la condizione viene valutata come vera

tuttavia si dovrebbe riscrivere la dichiarazione lo standard come:

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

questo è l'equivalente del seguente query utilizzando ANSI join sintassi:

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') 

Non sta unendo in una stringa, semplicemente specificando una condizione di join che si basa su uno.