Consigli da Toad for Oracle Formatter
Domanda
Cosa significa l'avviso?
Perché il secondo esempio peggiore della prima?
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.
*/
FYI: entrambe le query funzionano bene e restituiscono gli stessi risultati
.Soluzione
Mettendo da parte quantità di dati, indici delle tabelle, e ha raccolto le statistiche; in generale, unnested subqueries dovrebbe outperform subquery nidificate .
Altri suggerimenti
La mia ipotesi: Sembra che ROSPO non è l'analisi della query allo stesso modo che Oracle avrebbe
.Nella prima interrogazione, forse ROSPO controlla le definizioni di tabella per lims.sample e lims.product, e trova la colonna "product_id" in entrambi, quindi va bene.
Nella seconda query, il rospo non può controllare la definizione della tabella per la prima parte del join perché è una query nidificate; così forse si arrende e si dà questo consiglio (che è il motivo per cui il consiglio dice "... o si riferisce ad un'etichetta" che è probabilmente una copout).
Vorrei ignorare i consigli contenuti in questo caso, soprattutto perché funziona bene e restituisce gli stessi risultati.
Solo una supposizione, ma nella seconda interrogazione vostro subquery non è nominato - provare a dare è un alias; per esempio:
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)