Pergunta

O que a média aviso?

Por que é o segundo exemplo pior do que o primeiro?

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: Ambas as consultas correr bem e retornar os mesmos resultados

.
Foi útil?

Solução

Pondo de lado quantidade de dados, índices e estatísticas recolhidas das mesas; em geral, não aninhado subqueries deve outperform aninhada subqueries .

Outras dicas

Meu palpite: Parece SAPO não é analisar a consulta da mesma forma que a Oracle iria

.

Na primeira consulta, talvez cheques SAPO as definições de tabela para lims.sample e lims.product, e encontra a coluna "product_id" em ambos, por isso é bom.

Na segunda consulta, sapo não pode verificar a definição da tabela para a primeira parte da junção porque é uma consulta aninhada; talvez por isso desiste e dá-lhe este conselho (que é por isso que o conselho diz "... ou se refere a um rótulo", que é provavelmente uma copout).

Eu ignorar o conselho neste caso, especialmente no que funciona bem e retorna os mesmos resultados.

Apenas um palpite, mas na segunda consulta seu subconsulta não é chamado - tente dar-lhe um alias; por exemplo:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top