Asesoramiento de Toad para Oracle formateador
Pregunta
¿Qué significa la advertencia?
¿Por qué es el segundo ejemplo peor que el primero?
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.
*/
Para su información: Ambas consultas se ejecutan bien y devuelven los mismos resultados
.Solución
Dejando a un lado la cantidad de datos, índices de las tablas, y se reunieron las estadísticas; en general, no anidada subconsultas debería subconsultas anidadas superan .
Otros consejos
Mi suposición: Parece que SAPO no es analizar la consulta de la misma manera que Oracle
.En la primera consulta, tal vez SAPO comprueba las definiciones de tabla para lims.sample y lims.product, y encuentra la columna "product_id" en ambos, así que está bien.
En la segunda consulta, SAPO no puede comprobar la definición de la tabla de la primera parte de la unión porque es una consulta anidada; así que tal vez se rinde y le da este consejo (que es por el consejo dice "... o se refiere a una etiqueta", que es probablemente una copout).
Me ignorar el consejo en este caso, especialmente en lo que funciona muy bien y devuelve los mismos resultados.
Sólo una conjetura, pero en la segunda consulta su subconsulta no es nombrado - tratar dándole un alias; por ejemplo:
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)