Портирование соединения из Oracle в Postgres - PullRequest
1 голос
/ 28 апреля 2010
INSERT INTO MISSION_OBJECTIVE( MSN_INT_ID, MO_INT_ID, MO_MSN_CLASS_NM,
MO_MSN_CLASS_CD, MO_MSN_TYPE, MO_PRIORITY, MO_COMMENT, MO_START_DT,
MO_END_DT, ASP_AIRSPACE_NM, MO_OBJ_LOCATION, MO_ALO_LEG_ID,
MO_ALO_ARRIVE_LOC) SELECT '1025', '1', 'AIRDROP', 'ADP', 'LAPES', NULL,
COALESCE( NULL, ' '), TO_TIMESTAMP( '1002260900', 'YYMMDDHH24MI'),
TO_TIMESTAMP( '1002260915', 'YYMMDDHH24MI'), 'TRANSIT ALPHA', 'TRANSIT ALPHA', '1', 'TRANSIT ALPHA'
FROM AIRSPACE ASP, apsmain .MISSION_CLASS MC WHERE ASP.ASP_AIRSPACE_NM(+)= 'TRANSIT ALPHA'
AND MC.MCS_MISSION_CLASS_NAME= 'AIRDROP' AND 'TRANSIT ALPHA'
IS NOT NULL

Меня смущает то, что ASP.ASP_AIRSPACE_NM правильно соединен с константой.

Как я могу перенести это, чтобы использовать нормальное правое соединение?

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Немного убрал форматирование.

INSERT
INTO MISSION_OBJECTIVE
  (
    MSN_INT_ID, MO_INT_ID, MO_MSN_CLASS_NM, MO_MSN_CLASS_CD,
    MO_MSN_TYPE, MO_PRIORITY, MO_COMMENT, MO_START_DT,
    MO_END_DT, ASP_AIRSPACE_NM, MO_OBJ_LOCATION, MO_ALO_LEG_ID,
    MO_ALO_ARRIVE_LOC
  )
SELECT '1025', '1', 'AIRDROP', 'ADP',
  'LAPES', NULL, COALESCE( NULL, ' '), TO_TIMESTAMP( '1002260900', 'YYMMDDHH24MI'),
  TO_TIMESTAMP( '1002260915', 'YYMMDDHH24MI'), 'TRANSIT ALPHA', 'TRANSIT ALPHA', '1',
  'TRANSIT ALPHA'
FROM AIRSPACE ASP, apsmain .MISSION_CLASS MC
WHERE ASP.ASP_AIRSPACE_NM(+) = 'TRANSIT ALPHA'
AND MC.MCS_MISSION_CLASS_NAME= 'AIRDROP'

Замечания:

  • Список SELECT состоит только из константы.

  • Нет условия соединения между AIRSPACE и APSMAIN.MISSION_CLASS

  • MISSION_CLASS фильтруется Предикат AIRDROP. Если нет AIRDROP строк, то никаких строк не будет вставлена.

  • Таблица AIRSPACE , видимо фильтруется транзитной альфой сказуемое. Однако с Внешним Присоединяйтесь, он всегда вернется хотя бы одна строка, но может возвращать несколько строки.

Будет вставлена ​​одна строка для каждой строки AIRDROP, если есть ноль или одна строка ПЕРЕХОДНАЯ АЛЬФА Если имеется несколько строк TRANSIT ALPHA, количество вставленных строк будет кратным. Например, три строки AIRDROP и две строки TRANSIT ALPHA приведут к вставке шести строк.

1 голос
/ 28 апреля 2010

Это не совсем то же самое - (+) указывает на внешнее соединение в стране Oracle.

Равенство операторов действительно будет связано с данными в вашей таблице AIRSPACE, хотя, честно говоря, читая утверждение, я не думаю, что модификатор (+) на самом деле делает что-то полезное в этом случае, кроме того, что, вероятно, отбрасывает оптимизатор.

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