Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
SQL, PL/SQL, T-SQL: запросы, DML DDL операторы, пакеты, процедуры, функции, триггеры и последовательности.
  • Страница:
  • 1

ТЕМА:

Oracle: Иерархический SQL в JOIN 12 года 9 мес. назад #2653

  • Rita
  • Rita аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Иерархический под-запрос возвращает от 1 до 1000 значений и соответственно WHERE <some> in ( <list>) не эффективен.
Можно ли переписать это как JOIN ?
SELECT count(1) FROM INVENTORY
WHERE assigned_to IN
(SELECT employee_id
FROM employees
START WITH employee_id = '14998'
CONNECT BY PRIOR employee_id = supervisor_id);

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Иерархический SQL в JOIN 12 года 9 мес. назад #2654

select count(*) from inventory i

where exists (select null

              from employees e

              where i.assigned_to = e.employee_id

              connect by prior e.employee_id = e.supervisor_id

              start with employee_id = '14998')

;

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Иерархический SQL в JOIN 12 года 9 мес. назад #2655

Соотнесенный подзапрос тем и интересен, что выполняется ровно столько раз, сколько записей возвратил бы внешний запрос без подзапроса, Т.е. чем больше записей в INVENTORY, тем выгоднее твой первоначальный вариант.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Иерархический SQL в JOIN 12 года 9 мес. назад #2656

SELECT count(1) FROM INVENTORY I,
(SELECT employee_id FROM employees
START WITH employee_id = '14998'
CONNECT BY PRIOR employee_id = supervisor_id) E
WHERE I.assigned_to = E.employee_id;

А можно так попробовать)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Время создания страницы: 0.250 секунд