2015-04-29 10 views
5

Ich migriere die Software-Datenbank eines Kunden von Oracle nach PostgreSQL, und ich habe ein wenig Verständnis für eine Abfrage, was es tut und folglich wie es zu migrieren.Oracles OUTER JOIN (+) on string - Migration PostgreSQL

Die Abfrage ist:

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 

Und der Teil ich nicht bekommen, ist die äußere (+) auf 'Id' beizutreten. Ein Join auf einem Tisch, OK, aber auf einer Schnur? Ich habe keine Ahnung, was es macht.

Hat jemand eine Idee? Danke.

+0

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

Antwort

4

TBL4.PROPERTY_NAME(+)='Id' bedeutet, wenn die Leitung innere verbunden war, dann wird der Wert sein muss ‚Id‘, aber wenn die Leitung Außen verbunden wurde, wird die Bedingung als wahr

bewertet jedoch die Anweisung neu schreiben sollte der Standard wie folgt lautet:

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

Dies entspricht der folgenden Abfrage mit Syntax ANSI Join:

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

Sie sind nicht auf einen String verbinden, lediglich die Angabe einer Join-Bedingung, die auf einer basiert.