2009-06-04 7 views
1

警告は何を意味しますか?Toad for Oracle Formatterのアドバイス

2番目の例が最初の例よりも悪いのはなぜですか?

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

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. 
*/ 

はFYI:両方のクエリは正常に動作し、同じ結果を返します。

+0

いずれの場合も歓迎です。 – Steven

答えて

1

テーブルのデータ量、インデックス、および収集された統計量を脇に置く。 ネストしていないサブクエリは、よりも優れています。

0

私の推測:TOADは、Oracleと同じ方法でクエリを解析していないようです。

最初のクエリでは、おそらくTOADがlims.sampleとlims.productのテーブル定義をチェックし、両方で "product_id"という列を見つけたので、問題ありません。

2番目のクエリでは、TOADはネストされたクエリであるため、結合の最初の部分のテーブル定義をチェックできません。おそらくそれはあきらめて、あなたにこのアドバイスを与えます(これはアドバイスが "...それはおそらくコピーアウトであるラベルを指しています"という理由です)。

この例のアドバイスは無視されます。特にうまく動作し、同じ結果が返されるためです。

0

ちょうど推測ですが、2番目のクエリでは、サブクエリの名前は付けられません。エイリアスを指定してみてください。たとえば、

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) 
関連する問題