Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Como realizar a consulta pelo mysql

Oii tudo bem?

Estou utilizando o MySql para realizar as atividades proposta nas aulas. Quando tentei rodar o código desenvolvido pela professora na aula o MySql apresentou o seguinte erro:

20:24:39	SELECT pr.nome, subquery.idproduto, subquery.idpedido
FROM (     SELECT ip.idpedido, ip.idproduto      
FROM pedidos p     
INNER JOIN itenspedidos ip      
ON p.id = ip.idpedido     
WHERE MONTH(p.datahora) = 1 )
RIGHT JOIN produtos pr  
ON pr.id = ip.idproduto LIMIT 0, 1000

Error Code: 1248. Every derived table must have its own alias 0.000 sec

Então comecei a pesquisar sobre como realizar essa subconsulta e não consegui encontrar muita coisa sobre, mas o ChatGPT me mostrou o seguinte código que teve o mesmo resultado do que o apresentado na aula:

SELECT pr.nome, subquery.idproduto, subquery.idpedido
FROM (
    SELECT ip.idpedido, ip.idproduto 
    FROM pedidos p
    INNER JOIN itenspedidos ip 
    ON p.id = ip.idpedido
    WHERE MONTH(p.datahora) = 1
) AS subquery
RIGHT JOIN produtos pr 
ON pr.id = subquery.idproduto;

Não consegui entender muito bem como funciona a utilização do AS nesse caso, quando devo usá-lo e porquê ele se repetiu no trecho pr.id = subquery.idproduto. Além disso, teria outra forma de fazer a mesma coisa proposta na aula pelo MySql?

1 resposta
solução!

Oi Caroline, tudo bem?

Quando criamos uma subconsulta, é necessário dar um nome a ela usando AS para que o MySQL possa referenciá-la na consulta principal. No seu caso, a subconsulta foi nomeada como subquery, e por isso você vê subquery.idproduto e subquery.idpedido na consulta principal.

Analisando o código sugerido pelo chatGPT, nele, a subconsulta (SELECT ip.idpedido, ip.idproduto FROM pedidos p INNER JOIN itenspedidos ip ON p.id = ip.idpedido WHERE MONTH(p.datahora) = 1) é chamada de subquery. Assim, na consulta principal, você pode usar subquery.idproduto e subquery.idpedido para acessar os campos da subconsulta.

A repetição de subquery no trecho pr.id = subquery.idproduto é necessária para que o MySQL saiba que a coluna idproduto vem da subconsulta e deve ser comparada com a coluna id da tabela produtos. Sem essa referência, o MySQL não saberia de onde idproduto vem.

E sim, há outras formas de fazer isso no MySQL. Uma alternativa é usar LEFT JOIN em vez de RIGHT JOIN, mas seria necessário ajustar a lógica da consulta.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!