尝试从Oracle迁移到PostgreSQL

时间:2019-04-18 17:03:31

标签: oracle postgresql

SELECT b.SERVICENAME,
       a.PARAMETERNAME,
       a.PARAMETERVALUE
FROM serviceParameter a,
     subscriberService b,
     serviceName c
WHERE a.SUBSCRIBERKEY (+) = 15677889
  AND b.SUBSCRIBERKEY = 15677889
  AND b.SERVICENAME = a.SERVICENAME(+)
  AND c.SERVICENAME = b.SERVICENAME
  AND c.MULTIINSTANCE = '0'
ORDER BY a.SERVICENAME;

如何将以上代码迁移到PostgresSQL?

1 个答案:

答案 0 :(得分:0)

您必须按照以下方式进行翻译:

SELECT ...
FROM a, b
WHERE a.x = b.y(+)
  AND a.p = 42
  AND b.q(+) = 'foo';

将变为:

SELECT ...
FROM a LEFT OUTER JOIN b
        ON a.x = b.y
           AND b.q = 'foo'
WHERE a.p = 42;

也就是说:

  • 带有(+)的一侧成为LEFT OUTER JOIN的右侧(或等效地,成为RIGHT OUTER JOIN的左侧)。

  • 所有包含WHERE的{​​{1}}条件都失去了装饰,并进入了 join条件

将Oracle的联接语法转换为符合标准的语法很容易,因为后者更强大(并且更易于阅读和引导)。