【发布时间】:2018-02-01 11:58:54
【问题描述】:
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('%%'))
我们正在将上述查询从 Oracle 转换为 Postgres,我想在查询之外单独写入 cdar.productid(+)=info.field_auditor_id,例如在此处使用 LEFT/RIGHT join。很抱歉从我们的应用程序中粘贴所有这样的代码。
【问题讨论】:
-
嗨。如果您使用 use (+) 但不是在给定条件下使用所有出现的表别名,那么您将获得内连接而不是左连接。请参阅左连接的文档。所以这段代码不做左连接。请阅读minimal reproducible example 并采取行动。也请不要在你没有足够的抱歉来付出适当的努力时说你很抱歉。
-
如果我理解得更好,我会给出一些例子。 @philipxy 我不能这样复制。
-
您的问题到底是什么? “在查询之外单独写”不清楚。您只想在语法上使用联接而不是 (+) 吗?你在哪里被困在阅读什么 (+) & left join on do 并应用它?如果你有问题,那是什么?什么是最小的 DDL,有该问题的示例输入 & 输出 & 查询?此外,既然您知道您的查询实际上并没有进行左连接,那么您想要执行该查询的代码还是想要实际执行左连接的代码?如果是前者,只需去掉 (+);否则你想要什么做?--你没有说或显示。
标签: postgresql outer-join postgresql-9.4