Les conseils de Toad for Oracle Formatter
Question
Que signifie l'avertissement?
Pourquoi le deuxième exemple pire que le premier?
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.
*/
Pour votre information: Les deux requêtes fonctionnent bien et renvoient les mêmes résultats
.La solution
Mettre de côté les tables de quantité de données, des index et des statistiques recueillies; en général, sous-requêtes non imbriquées devrait surperformer les sous-requêtes imbriquées .
Autres conseils
Je pense: On dirait que TOAD n'est pas l'analyse de la requête de la même manière qu'Oracle
.Dans la première requête, peut-être TOAD vérifie les définitions de table pour lims.sample et lims.product, et trouve la colonne « product_id » dans les deux, il est donc très bien.
Dans la seconde requête, TOAD ne peut pas vérifier la définition de table pour la première partie de la jointure, car il est une requête imbriquée; alors peut-être qu'il donne et vous donne ce conseil (ce qui explique pourquoi le conseil dit « ... ou il fait référence à une étiquette » qui est probablement une dérobade).
J'ignorer les conseils dans ce cas, surtout en ce qui fonctionne très bien et retourne les mêmes résultats.
Juste une supposition, mais dans la deuxième requête de votre sous-requête n'est pas nommé - essayez lui donner un alias; par exemple:
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)