Оракул подсказывает несколько соединений разными способами
Я пытаюсь заставить базу данных Oracle 11g Express Edition сделать JOIN с двумя конкретными методами в двух JOINS SELECT, но это не работает, когда я пытаюсь сделать это с подсказками USE_MERGE и USE_NL. Мой SELECT выглядит так:
SELECT /*+ ORDERED USE_MERGE(sp) USE_NL(p) FULL(s) FULL(sp) FULL(p) */ DISTINCT s.*
FROM s, sp, p
WHERE s.sn = sp.sn AND
p.pn = sp.pn AND
color = 'Rojo';
но фактический план объяснения, который я получаю, таков:
объяснить план, который я получаю от оракула
Я действительно отчаянно нуждаюсь в этом, и я смотрю на великолепную документацию оракула, но я все еще не могу этого достичь. Этот пример выглядит очень похоже, но я не знаю, почему не работает с комбинацией, которую я пробую. Следующий код является примером, предоставленным из Oracle:
SELECT /*+ LEADING(e2 e1) USE_NL(e1) INDEX(e1 emp_emp_id_pk)
USE_MERGE(j) FULL(j) */
e1.first_name, e1.last_name, j.job_id, sum(e2.salary) total_sal
FROM employees e1, employees e2, job_history j
WHERE e1.employee_id = e2.manager_id
AND e1.employee_id = j.employee_id
AND e1.hire_date = j.start_date
GROUP BY e1.first_name, e1.last_name, j.job_id
ORDER BY total_sal;
Заранее спасибо за помощь:D
1 ответ
Использование USE_MERGE(s sp)
вместо USE_MERGE(sp)
, Но я не могу объяснить, почему это работает. Подсказки хитры, лучше избегать их как можно больше.
Вот SQL Fiddle, демонстрирующий работу новой подсказки.