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

.
¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top