как изменить / упростить объединения в Oracle - PullRequest
0 голосов
/ 04 марта 2010

У меня есть объединение в запросе оракула, который выглядит так:

      FROM eiv.table1
           eiv.table2 b
       WHERE a.state_cd =
             b.state_code(+)

что означает (+) к концу?

С помощью этого запроса я заметил, что иногда я получаю пустое пространство, когда записи не совпадают в таблицах.

Это левое внешнее соединение или правое? Как это можно упростить.

Ответы [ 3 ]

1 голос
/ 04 марта 2010
SELECT  *
FROM    eiv.table1 a
LEFT JOIN
        eiv.table2 b
ON      b.state_code = a.state_cs

До 9i, Oracle не поддерживал синтаксис объединения ANSI, вместо него использовалось предложение (+).

0 голосов
/ 04 марта 2010

http://www.adp -gmbh.ch / ора / SQL / outer_join.html

"Это может быть то, что вы хотите, или это может не. Предполагая, что мы хотим вернуть все числа, даже если немец перевод отсутствует, нам нужен внешнее соединение. Внешнее соединение использует (+) на стороне оператора (который в этот случай случается равенство оператор), где мы хотим иметь нулевые возвращается, если значение не соответствует:

выберите l.v "английский", r.v «Немец» от р, л, где л.и
= r.i (+) и r.l (+) = 'de';

И это возвращает строку для каждого английское слово, даже если нет немецкий перевод:

английский немецкий -------------------- -------------------- один два zwei три drei четыре пять "

0 голосов
/ 04 марта 2010

Это означает, что это левое внешнее соединение ... Детали всегда берутся из a, и только из b, когда условие выполнено ...

ОТ eiv.table1 eiv.table2 b ГДЕ a.state_cd = b.state_code (+)

=

из evi.table1 левого соединения eiv.tableb b on (a.state_cd = b.state_code)

Возможно, вы захотите подумать об использовании одного и того же имени столбца для кода состояния в обеих таблицах, но для этого может быть немного поздно ...

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