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?
答案 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的联接语法转换为符合标准的语法很容易,因为后者更强大(并且更易于阅读和引导)。