Оракул подсказывает несколько соединений разными способами

Я пытаюсь заставить базу данных 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, демонстрирующий работу новой подсказки.

Другие вопросы по тегам