3
respostas

Maneira diferente de fazer a consulta

Fiz a consulta de outra maneira. Modéstia à parte ficou mais elegante, rs, e rodou mais rápido. De quebra descobri, na tentativa, que dá pra usar o AND com o ON, no INNER JOIN, para relacionar tabelas: ON TC.CPF = NF.CPF AND INF.NUMERO = NF.NUMERO

O select ficou assim:

SELECT CONCAT('O cliente ',TC.NOME,' faturou ',ROUND(SUM(INF.QUANTIDADE*INF.PRECO),0),' no ano de ',YEAR(NF.DATA_VENDA)) as RESULTADO FROM tabela_de_clientes TC INNER JOIN notas_fiscais NF INNER JOIN itens_notas_fiscais INF ON TC.CPF = NF.CPF AND INF.NUMERO = NF.NUMERO WHERE YEAR(NF.DATA_VENDA) = 2016 GROUP BY TC.NOME;

Em tempo: só agora no final os exercícios propostos ficaram interessantes. Geralmente eles eram muito mais fáceis do que os selects das aulas. Fica a sugestão.

3 respostas

Olá Bruno, tudo bem? Que legal, que você está indo além do que é proposto no curso e tentando novas soluções e alternativa. Continue assim e bons estudos!

Falei com um amigo que é profissional da área, e ele não sabia da possibilidade de se fazer um join do jeito abaixo (INNER JOIN, INNER JOIN, ON, AND):

TABELA_DE_PRODUTOS TP INNER JOIN ITENS_NOTAS_FISCAIS INF INNER JOIN NOTAS_FISCAIS NF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO AND NF.NUMERO = INF.NUMERO

em vez do que é ensinado aqui, do jeito abaixo (INNER JOIN, ON, INNER JOIN ON):

TABELA_DE_PRODUTOS TP INNER JOIN ITENS_NOTAS_FISCAIS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO INNER JOIN NOTAS_FISCAIS NF ON NF.NUMERO = INF.NUMERO

Ele me disse pra testar muito, pra ter certeza que sempre retorna o mesmo resultado. Alguém pode me dar essa certeza?

Bruno, é possível e realmente é feito dessa forma, você está apenas juntando mais de duas tabelas, e é relamente dessa forma sim, usamos primeiramente um INNER JOIN, ON para juntar as duas primeiras, e depois outro INNER JOIN, ON para juntar mais uma tabela, a essas duas que já eram uma só anteriormente. É isso mesmo, você pode verificar isso no site w3schools.com que é o site que o professor utilizar para mostrar as funções que podemos utilizar no SQL. Acesse a seção JOIN Three Tables, onde é apresentado um JOIN ou seja uma junção entre três (3) tabelas.