Если вы хотите использовать коррелированный подзапрос (это нормально), вы должны сделать следующее:
d
Важные изменения:
- Квалифицируйтесь все имена столбцов (я не знаю , где
a
,b
иd
приходят из). - Используйте явно
join
.
Вы также можете написать этот запрос как:
select a, b, t3.x, d
from table1 z join
table2 zz
on z.id = zz.id left join
table3 t3
on t3.id = z.id;
Этот запрос существенно отличается от предыдущего. Предыдущий возвращает ошибку, если подзапрос возвращает более одной строки. Каждый из этих значений будет помещен в другой столбец.
Тем не менее, оптимизатор Oracle неплох. Я был бы удивлен, если бы была заметная разница в производительности.