Попытка перехода с Oracle на PostgreSQL - PullRequest
0 голосов
/ 18 апреля 2019
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 голосов
/ 19 апреля 2019

Вы должны перевести это следующим образом:

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 условия, содержащие (+), теряют это украшение и переходят в условие соединения .

Синтаксис соединения Oracle легко перевести на стандартный соответствующий синтаксис, поскольку последний более мощный (и его легче читать при загрузке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...