Ratschläge von Toad für Oracle Formatter
Frage
Was bedeutet die Warnung?
Warum ist das zweite Beispiel schlimmer als das erste?
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.
*/
Zu Ihrer Information:Beide Abfragen laufen einwandfrei und liefern die gleichen Ergebnisse.
Lösung
Setzen der Tabellen Datenmenge beiseite, Indizes und sammelte Statistiken; in der Regel nicht verschachtelte Unterabfragen sollte outperform verschachtelte Unterabfragen .
Andere Tipps
Meine Vermutung: Es sieht aus wie TOAD nicht wird die Abfrage auf die gleiche Weise Parsen, dass Oracle würde
.In der ersten Abfrage, vielleicht TOAD prüft die Tabellendefinitionen für lims.sample und lims.product und findet die Spalte „product_id“ in beide, so ist es in Ordnung.
In der zweiten Abfrage kann TOAD überprüfen nicht die Tabellendefinition für den ersten Teil der Verbindung, weil es eine verschachtelte Abfrage ist; so vielleicht gibt es und gibt Ihnen diesen Rat (weshalb der Rat sagt: „... oder es bezieht sich auf ein Etikett“, das wahrscheinlich ein copout ist).
Ich würde den Rat in diesem Fall ignorieren, vor allem, wie es läuft gut und gibt die gleichen Ergebnisse.
Nur eine Vermutung, aber in der zweiten Abfrage wird Ihre Unterabfrage nicht benannt – versuchen Sie, ihr einen Alias zu geben;Zum Beispiel:
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)