2012-04-30 4 views
1

У меня есть 3 таблицы оракула. Присоединяется к B и B присоединяется к C. Я хочу, чтобы все записи из irerspective от того, существует ли соответствующая запись в B или C. Я написал запрос, как это:запрос внешнего соединения оракула

select a.name from a,b,c where a.a_id = b.b_id(+) and b.b_id = c.c_id(+) 

Этот запрос не кажется мне правильным , особенно со вторым соединением. Что произойдет, если в A есть запись, но в B и C нет ничего подобного? Будет ли он еще брать запись?

По какой-то причине вышеуказанный запрос возвращает то же количество записей, что и select a.name from a Так что я предполагаю, что запрос прав? Также есть лучший способ переписать запрос?

+0

В а строки будут возвращены независимо от того, есть ли строка с соответствующим идентификатором в b или c. Теперь, что произойдет, если для id 1 есть строка, строка c и строка b? b.b_id имеет значение null ... так что ... попробуйте. – joshp

+0

Спасибо. Если для id 1 в a, нет b строки, то как будет c-строка? c не имеет прямой связи с? Не могли бы вы немного объяснить? – Victor

+0

Вы поняли. Поскольку нет строки b, b.b_id равно null, даже если существует строка c, вы ее не извлечете. Подумайте, когда вы пишете такое соединение. – joshp

ответ

0

Я полагаю, тем лучше может быть запрос

Select a.name from A a left join B b on a.a_id=b.b_id inner join C c on b.b_id=c.c_id 

Это должно дать результат, как вы ожидали

http://rajanmaharjan.com.np

Смежные вопросы