문제

경고는 무엇을 의미합니까?

두 번째 예제가 첫 번째 예보다 더 나빠진 이유는 무엇입니까?

SELECT   product_id, prod.name name, sample_id
  FROM   lims.sample JOIN lims.product prod USING (product_id)

vs.

SELECT   product_id, prod.name name, sample_id
  FROM   (SELECT   sample_id, product_id FROM lims.sample)
         JOIN lims.product prod
/* ADVICE: [131]  This item has not been declared, or it refers to a label */
            USING (product_id)

/* ADVICE:
ADVICE SUMMARY

Count  Recommendation
-----  --------------
    1  [131]  This item has not been declared, or it refers to a label
                  The Oracle equivalent error messages are  PLS-00320 and
                  PLS-0321.
*/

참고 : 두 쿼리는 모두 잘 실행되며 동일한 결과를 반환합니다.

도움이 되었습니까?

해결책

테이블의 데이터, 인덱스 및 수집 통계량을 제쳐두고; 일반적으로 미확인 하위 쿼리 ~해야 한다 중첩 하위 쿼리보다 성능이 뛰어납니다.

다른 팁

내 추측 : Toad가 Oracle과 같은 방식으로 쿼리를 구문 분석하지 않는 것처럼 보입니다.

첫 번째 쿼리에서 아마도 두꺼비는 lims.sample 및 lims.product에 대한 테이블 정의를 확인하고 두 가지 모두에서 "product_id"열을 찾으므로 괜찮습니다.

두 번째 쿼리에서 Toad는 중첩 된 쿼리이기 때문에 조인의 첫 번째 부분에 대한 테이블 정의를 확인할 수 없습니다. 따라서 아마도 그것은 당신 에게이 조언을 포기하고 당신에게 제공합니다 (이것이 조언이 "... 또는 아마도 코파트 인 레이블을 언급하는 이유입니다).

나는이 사례의 조언을 무시하고, 특히 그것이 잘 실행되고 동일한 결과를 반환하기 때문에 무시할 것입니다.

단지 추측이지만 두 번째 쿼리에서 하위 쿼리는 이름이 없습니다. 별명을주십시오. 예를 들어:

SELECT   product_id, prod.name name, sample_id
  FROM   (SELECT   sample_id, product_id FROM lims.sample) samp
         JOIN lims.product prod
            USING (product_id)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top