У вас есть три таблицы и только одно условие соединения;вам нужно соединение между сотрудником и одобрения.Без этого вы получаете перекрестное произведение или декартово объединение между этими таблицами.
С N таблицами (N> 0) вам необходимо как минимум условия объединения J = N-1.У вас N = 3 таблицы, но J = 1 условия соединения - что слишком мало.(Существуют различные причины, по которым вам может понадобиться J> N - 1, но основная причина заключается в том, что вам нужно объединить два столбца между двумя таблицами. Если вы считаете каждое условие 'A.Col1 = B.Col2' как отдельное условие соединения, тогда вам нужно J> N-1, если вы посчитаете пару условий 'A.Col1 = B.Col2 AND A.Col3 = B.Col4' как одно условие соединения, то вам все равно нужен только J = N-1условия.)
В идеале вы также должны отойти от архаичной нестандартной нотации внешнего соединения, используя '(+)', и использовать стандартные SQL-соединения.
Нотацияэто вторичная проблема.Каждая строка в Employee объединяется с каждой строкой в одобрении, а затем этот перекрестный продукт соединяется с Helicopter_type.Это (почти наверняка) не тот запрос, который требуется.
Возможно, вам потребуется добавить несколько вариантов этого в предложение WHERE:
AND E.EMP_NBR = ED.EMP_NBR
(где фактический столбец в индоссаменте(ED) таблица не отображается в запросе, поэтому «ED.EMP_NBR» является предположением).
Среди других эффектов, если в базе данных есть пилоты вертолетов, то каждая запись сотрудника объединяется сподтверждение пилота иногда, и порядок сортировки означает, что эти записи будут показаны перед бесчисленным количеством записей, которые показывают, что пилоты не имеют одобрений вертолетов, и что не пилоты не имеют записей вертолетов и т. д...