Oracle 甲骨文';字符串迁移PostgreSQL上的外部联接(+;)

Oracle 甲骨文';字符串迁移PostgreSQL上的外部联接(+;),oracle,postgresql,join,database-migration,outer-join,Oracle,Postgresql,Join,Database Migration,Outer Join,我正在将一个客户机的软件数据库从Oracle迁移到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

我正在将一个客户机的软件数据库从Oracle迁移到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”上的外部连接(+)。 表上的联接,好的,但是字符串上的联接?我不知道它是干什么的

有人有主意吗?
谢谢。

这相当于使用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')
您没有连接到字符串,只是指定了一个基于字符串的连接条件。

TBL4。属性名称(+)='Id'
表示当该行内部连接时,该值必须为'Id',但当该行外部连接时,该条件的计算结果为true

但是,您应将该声明改写为标准:

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'