Postgresql 左/右连接重写-Oracle到Postgres的迁移

Postgresql 左/右连接重写-Oracle到Postgres的迁移,postgresql,outer-join,postgresql-9.4,Postgresql,Outer Join,Postgresql 9.4,我们正在将上述查询从Oracle转换为Postgres,我希望在查询之外单独写入cdar.productid(+)=info.field\u auditor\u id,就像在这里使用左/右连接一样。很抱歉从我们的应用程序中粘贴所有类似的代码 将其转换为标准SQL连接,如下所示: select info.HOUSE_HOLD_ID as HOUSE_HOLD_ID,info.HOUSE_HOLD_NAME as HOUSE_HOLD_NAME,city.CITY_NAM

我们正在将上述查询从Oracle转换为Postgres,我希望在查询之外单独写入
cdar.productid(+)=info.field\u auditor\u id
,就像在这里使用左/右连接一样。很抱歉从我们的应用程序中粘贴所有类似的代码

将其转换为标准SQL连接,如下所示:

select info.HOUSE_HOLD_ID as HOUSE_HOLD_ID,info.HOUSE_HOLD_NAME 
             as HOUSE_HOLD_NAME,city.CITY_NAME as CITY_NAME,info.FIELD_AREA as FIELD_AREA,
             cdar.resource_name as FIELD_AUDITOR_NAME,cdar.supervisor_name as SUPERVISOR_NAME,
             info.STATUS as STATUS,con.PHONE_NO AS PHONE_NO,con.CELL_NO AS CELL_NO
             from INFORMATION info,CONTACT con,CITY city,
             resource cdar
             where cdar.productid(+)=info.field_auditor_id
             and info.country_id=170 
             and con.country_id=170 and city.country_id=170 
             and info.HOUSE_HOLD_ID=con.HOUSE_HOLD_ID 
             and info.city_id=city.city_id
             and (upper(info.HOUSE_HOLD_ID) like upper('%%') 
                  or upper(info.HOUSE_HOLD_NAME) like upper('%%') or upper(city.CITY_NAME)
                  like upper('%%') or upper(con.PHONE_NO) like upper('%%') 
                  or upper(con.CELL_NO) like upper('%%')
                  or upper(info.FIELD_AREA) like upper('%%') 
                  OR upper(info.STATUS) in ('1','2','3','4') 
                  OR upper(cdar.RESOURCE_NAME) like upper('%%'))

WHERE
子句中删除连接条件。

Hi。如果在给定条件下使用use(+),但不与表别名的所有匹配项一起使用,则得到的是内部联接,而不是左联接。请参阅关于左连接的文档。所以这段代码不做左连接。请阅读并采取行动。另外,当你没有足够的抱歉投入到适当的努力时,请不要说对不起。如果我理解得更好,我会举一些例子@菲利普西:我不能照着原样抄。你的问题是什么?“在查询之外单独写入”不清楚。是否只想在语法上使用联接而不是(+)?您在哪里被困在阅读(+)&left join on所做的事情并应用它?如果你有问题,那是什么?这个问题的最小DDL是什么,例如输入输出和查询?另外,现在您知道您的查询实际上并没有执行左连接,您是想要执行该查询所执行的操作的代码,还是想要执行左连接的代码?如果是前者,只需删除(+);否则你想要什么?--你还没有说或显示。我对这个问题的第一个评论指出,因为他们没有在每次出现cdar时都使用(+),所以(+)被忽略。重新澄清问题标题表明他们正在将(+)映射到一个外部连接上,但问题的措辞是一团混乱,你正在猜测。这是一个准确的观察结果,我确实在猜测。
SELECT ...
FROM information info
   JOIN contact con ON info.house_hold_id = con.house_hold_id
   JOIN city city ON info.city_id = city.city_id
   LEFT JOIN resource cdar ON cdar.productid = info.field_auditor_id
WHERE ...