Use NOT EXISTS in 2 subquerys

3

I tried to use NOT EXISTS , but it is bringing the results that do not exist in the tb_pedidoproduto table, I believe 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 of the first SELECT with those of the second, I tried to make a SELECT using the - operand, but it did not work as well.

Q.: I have asked a question about this, but the answers did not help, and apparently if I edit the question nobody will answer, so I made another one.

    
asked by anonymous 27.12.2017 / 13:52

1 answer

0

I think your problem is in your sub select. You need to relate your tb_pedidoproduto table with the tb_produto it within the sub select and only then check if the ids are equal AND ProdutoSub.idproduto = produto.idproduto in both tables. Here's how it goes.

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 do not 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
    
28.12.2017 / 14:25