У меня есть 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
Так что я предполагаю, что запрос прав? Также есть лучший способ переписать запрос?
В а строки будут возвращены независимо от того, есть ли строка с соответствующим идентификатором в b или c. Теперь, что произойдет, если для id 1 есть строка, строка c и строка b? b.b_id имеет значение null ... так что ... попробуйте. – joshp
Спасибо. Если для id 1 в a, нет b строки, то как будет c-строка? c не имеет прямой связи с? Не могли бы вы немного объяснить? – Victor
Вы поняли. Поскольку нет строки b, b.b_id равно null, даже если существует строка c, вы ее не извлечете. Подумайте, когда вы пишете такое соединение. – joshp