NOT EXISTS usage in 2 subquerys

Asked

Viewed 36 times

3

I tried to use the NOT EXISTS, but is bringing the results that does not exist in the table tb_pedidoproduto, I believe that the LIMIT is not working:

SELECT produto.idproduto
      ,produto.nomeproduto
      ,produto.idcategoria
      ,produto.imagem
      ,produto.qtdmedida
      ,produto.valorproduto
      ,produto.idunidademedida
      ,produto.descricaoproduto
  FROM tb_produto AS produto
 WHERE produto.idcategoria = '2'
   AND NOT EXISTS ( SELECT pedidoproduto.idproduto
                           ,SUM(pedidoproduto.qtdprodutopedido) AS qtdprodutopedido
                      FROM tb_pedidoproduto AS pedidoproduto
                     WHERE produto.idcategoria = '2'
                       AND produto.idproduto = pedidoproduto.idproduto
                     GROUP BY pedidoproduto.idproduto
                     ORDER BY qtdprodutopedido DESC LIMIT 6)
 ORDER BY produto.idproduto ASC

Basically what I need is to subtract the results from the first SELECT with those of the second, I tried to make a SELECT using the operand -, but it didn’t hurt either.

P.S.: I asked a question already about this, but the answers didn’t help, and apparently if I edit the question no one will answer, so I asked another one.

  • Just so I’m clear, you want to pick up the different items between the two querys?

  • That, I want to get all the products except the 6 that sold the most (which are brought by the subquery of the table tb_pedidoproduto

  • tried to trade Not Exist for Not In?

  • By the way, which database are you using?

  • I tried, I use mysql, and it is not accepting NOT IN

  • "#1235 - This Mysql version does not yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"

  • Jeez, any chance to update Mysql?

  • I tried, it didn’t work

  • Can you do a little demonstration of how it should work? Like put a table with some reggistros and what should happen? 'Cause I think you can solve with joins

Show 4 more comments

1 answer

1

I believe your problem is in your sub select.. You need to list your table tb_pedidoproduto with the tb_produto this inside the sub select and only then check if the ids are equal AND ProdutoSub.idproduto = produto.idproduto in both tables. See how it looks.

SELECT produto.idproduto
      ,produto.nomeproduto
      ,produto.idcategoria
      ,produto.imagem
      ,produto.qtdmedida
      ,produto.valorproduto
      ,produto.idunidademedida
      ,produto.descricaoproduto
 FROM tb_produto AS produto
 WHERE produto.idcategoria = '2'

   AND NOT EXISTS ( SELECT pedidoproduto.idproduto ,SUM(pedidoproduto.qtdprodutopedido) AS qtdprodutopedido
                      FROM tb_pedidoproduto AS pedidoproduto
                      join tb_produto AS ProdutoSub on ProdutoSub.idproduto = pedidoproduto.idproduto
                      WHERE ProdutoSub.idcategoria = '2'
                      AND ProdutoSub.idproduto = produto.idproduto
                      GROUP BY pedidoproduto.idproduto
                      ORDER BY qtdprodutopedido 
                      DESC LIMIT 6)

 ORDER BY produto.idproduto ASC

Make sure your sub select is returning the 6 you don’t want.

SELECT pedidoproduto.idproduto ,SUM(pedidoproduto.qtdprodutopedido) AS qtdprodutopedido
                      FROM tb_pedidoproduto AS pedidoproduto
                      join tb_produto AS ProdutoSub on ProdutoSub.idproduto = pedidoproduto.idproduto
                      WHERE ProdutoSub.idcategoria = '2'
                      --AND ProdutoSub.idproduto = produto.idproduto
                      GROUP BY pedidoproduto.idproduto
                      ORDER BY qtdprodutopedido 
                      DESC LIMIT 6

Browser other questions tagged

You are not signed in. Login or sign up in order to post.