You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle转PostgreSQL迁移:含(+)的关联SQL语句改写需求

改写Oracle(+)外连接SQL为PostgreSQL兼容版本

没问题,我帮你把这条Oracle风格的SQL改成PostgreSQL完全支持的写法,核心是把Oracle专属的(+)外连接语法替换成标准SQL的显式JOIN,同时优化表关联的写法让代码更清晰:

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
INNER JOIN CONTACT con 
    ON info.HOUSE_HOLD_ID = con.HOUSE_HOLD_ID 
    AND con.country_id = 170
INNER JOIN CITY city 
    ON info.city_id = city.city_id 
    AND city.country_id = 170
LEFT JOIN resource cdar 
    ON info.field_auditor_id = cdar.productid
WHERE 
    info.country_id = 170
    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('%%')
        -- 这里可以补全你原SQL里省略的其他条件
    );

关键改动说明:

  • 替换(+)外连接:Oracle里cdar.productid(+)=info.field_auditor_id是左外连接的写法,对应PostgreSQL的LEFT JOIN resource cdar ON info.field_auditor_id = cdar.productid,这样能保证INFORMATION表的所有符合条件的行都被保留,即使resource表中没有匹配的记录。
  • 改用显式JOIN语法:把原来逗号分隔的表列表换成INNER JOIN,把关联条件写在ON子句里,比旧写法更直观,也避免了不小心把过滤条件和关联条件混在一起的问题。
  • 保留原有逻辑:所有过滤条件(比如country_id=170)、字段别名、模糊匹配逻辑都完全保留,确保查询结果和原Oracle语句一致。

另外提个小细节:原SQL里的UPPER('%%')其实是匹配任意内容的模糊查询,如果你是想保留这个逻辑就没问题;如果是占位符没填内容,记得替换成实际的搜索关键词哦。

内容的提问来源于stack exchange,提问作者user1720827

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:10:37