1

警告はどういう意味ですか?

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

参考:どちらのクエリも正常に実行され、同じ結果が返されます。

4

3 に答える 3

1

テーブルのデータ量、インデックス、および収集された統計を脇に置きます。一般に、ネストされていないサブクエリは、ネストされたサブクエリよりもパフォーマンスが優れている必要があります。

于 2009-06-04T23:32:12.413 に答える
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)
于 2009-06-12T18:26:24.757 に答える
0

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

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

2番目のクエリでは、TOADはネストされたクエリであるため、結合の最初の部分のテーブル定義を確認できません。だからおそらくそれはあきらめてあなたにこのアドバイスを与えます(それがアドバイスが「...またはそれはおそらく警官であるラベルを参照している」と言う理由です)。

この場合のアドバイスは無視します。特に、正常に実行され、同じ結果が返されるためです。

于 2009-06-05T02:04:12.280 に答える