0

Oracle データベース 11g Express Edition に、2 つの JOIN SELECT で 2 つの特定のメソッドを使用して JOIN を作成させようとしていますが、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

4

1 に答える 1

0

USE_MERGE(s sp)の代わりに使用しUSE_MERGE(sp)ます。しかし、なぜそれが機能するのか説明できません。ヒントは難しいので、できるだけ避けるのが最善です。

これは、新しいヒントが機能することを示すSQL Fiddleです。

于 2015-11-20T19:02:58.410 に答える