none
Sub consulta em DELETE RRS feed

  • Pergunta

  • Bom dia pessoal, estou tentando efetuar o seguinte DELETE, porém, apesar de ser executado sem erro, as linhas que deveriam ser deletada não foram:

    DELETE
    FROM
        PEDIDO
    WHERE
        PEDIDO.CD_PRODUTO =
        (
            SELECT
              PRODUTO.CD_PRODUTO
            FROM
                PRODUTO
            WHERE
                PRODUTO.DS_PRODUTO = 'MALHA TUBULAR 0,8CM'
        )
    AND PEDIDO.ANO = 2009
    quinta-feira, 4 de março de 2010 13:31

Respostas

  • Boa Tarde,

    Se o comando retorna zero significa que nenhuma linha foi afetada pelo DELETE e que não há registros a excluir.
    Eu sugiro verificar se os registros que você está procurando realmente existem. Será que a cláusula WHERE está correta ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Encontrando tabelas não utilizadas
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!957.entry
    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 4 de março de 2010 17:04



  • SELECT Pe.*, pro.* FROM PEDIDO pe inner join produto pro on pe.cd_produto = pro.cd_produto WHERE pro.DS_PRODUTO = 'MALHA TUBULAR 0,8CM' and pe.ano = 2009
    MarquesJr,

    faça um join entre as tabelas para ver se os registros usados na comparação realmente existem nas duas tabelas .
    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    • Marcado como Resposta Marques Junior quinta-feira, 4 de março de 2010 18:04
    quinta-feira, 4 de março de 2010 17:20
  • Oi Marques;

    Acho que dese jeito a query ficaria mais simples e faria a mesma coisa:

    DELETE P
    FROM
        PEDIDO P INNER JOIN PRODUTO P1 ON P.CD_PRODUTO = P1.CD_PRODUTO
    WHERE
        P.ANO = 2009 AND
        P1.DS_PRODUTO = 'MALHA TUBULAR 0,8CM'

    Espero ter ajudado.
    Moisés. 

    • Marcado como Resposta Marques Junior quinta-feira, 4 de março de 2010 18:04
    quinta-feira, 4 de março de 2010 17:35
  • Olá Marques,

    Não vejo nenhum erro no seu comando. Acredito que ou a cláusula WHERE está equivocada ou não há dados para serem escritos.
    Embora o seu SELECT retorne 20 registros o ano utilizado é 2010 e não 2009. Vale a pena lembrar que ele está usando o LEFT e enquanto o JOIN sugerido utilizou o INNER e a subquery também o utiliza. 

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Encontrando tabelas não utilizadas
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!957.entry


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 4 de março de 2010 17:51
  • Observe que, no seu último select, o ano é 2010.

    DELETE P
    FROM
        PEDIDO P INNER JOIN PRODUTO P1 ON P.CD_PRODUTO = P1.CD_PRODUTO
    WHERE
        P.ANO = 2010 AND
        P1.DS_PRODUTO = 'MALHA TUBULAR 0,8CM'

    Com 2010 resolve?
    • Marcado como Resposta Marques Junior quinta-feira, 4 de março de 2010 18:10
    quinta-feira, 4 de março de 2010 17:56

Todas as Respostas