none
update + query RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Tenho essa consulta que me retorna 353 registros:

    select distinct di.idlaf,di.numitem,dic.natrec from dlaf dl
    inner join ditem di on (di.idlaf = dl.idlaf)
    left join ditemcompl dic on (dic.idlaf = di.idlaf and di.numitem = dic.numitem)
    inner join tprd tp on (tp.idprd = di.idprd)
    inner join dtrbitem dti on (dti.idlaf = di.idlaf and dti.numitem = di.numitem)
    where tp.descricao like '%arroz%' and dl.tipolf = 'S'
    and dl.dataemissao >= '2011/08/01' and dl.dataemissao <= '2011/08/31'
    and dti.sittributaria  in ('04','06') and dl.seriedoc in ('1','ECF')
    and dic.natrec is null
    order by di.idlaf

    Preciso atualizar o campo dic.natrec desses 353 registros. Fiz assim:

    update ditemcompl set natrec = '105'
    from dlaf dl inner join ditem di on (dl.idlaf = di.idlaf)
    left join ditemcompl dic on (dic.idlaf = di.idlaf and dic.numitem = di.numitem)
    inner join tprd tp on (tp.idprd = di.idprd)
    inner join dtrbitem dti on (dti.idlaf = di.idlaf and dti.numitem = di.numitem)
    where tp.descricao like '%arroz%' and dl.tipolf = 'S'
    and dl.dataemissao >= '2011/08/01' and dl.dataemissao <= '2011/08/31'
    and dti.sittributaria  in ('04','06')
    and dl.seriedoc in ('1','ECF') and dic.natrec is null

    Atualizou apenas 196 registros. Ou seja como se a query buscasse apenas os idlaf (identificador do lanc. fiscal) sem o numitem que seriam os items do lançamento fiscal (totalizando 353 registros).

    A forma como estou aplicando o update deve estar incorreta.

    Se puderem dar uma força eu agradeço.



    segunda-feira, 31 de outubro de 2011 18:35

Respostas

  • Olá Romanvpp,

    Veja se isto talvez ajude alguma coisa no teu problema.

    update ditemcompl set natrec = '105' where exists (
    	select distinct di.idlaf,di.numitem,dic.natrec 
    	  from dlaf dl inner join ditem di on (di.idlaf = dl.idlaf)
    					left join ditemcompl dic on (dic.idlaf = di.idlaf and di.numitem = dic.numitem)
    					inner join tprd tp on (tp.idprd = di.idprd)
    					inner join dtrbitem dti on (dti.idlaf = di.idlaf and dti.numitem = di.numitem)	 
    	 where tp.descricao like '%arroz%' and dl.tipolf = 'S'
    	   and dl.dataemissao >= '2011/08/01' and dl.dataemissao <= '2011/08/31'
    	   and dti.sittributaria  in ('04','06') and dl.seriedoc in ('1','ECF')
    	   and dic.natrec is null  );
    


    Caso contrário, tenta repassar os create das tabelas e alguns inserts para teste.

    Vlew.

    • Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 2 de novembro de 2011 23:33
    • Marcado como Resposta Eder Costa quarta-feira, 9 de novembro de 2011 16:10
    terça-feira, 1 de novembro de 2011 19:18
  • Fala Marcus,

     

    Cara já consegui resolver. Na verdade, como estou usando um left join na consulta o resultado nunca ficará igual ao update, porque após o update o que estava de fora (left join) eu devo inserir na tabela e não atualizar.

     

    Mas te agradeço assim mesmo.

    • Marcado como Resposta Eder Costa quarta-feira, 9 de novembro de 2011 16:10
    terça-feira, 1 de novembro de 2011 20:16

Todas as Respostas

  • Olá Romanvpp,

    Veja se isto talvez ajude alguma coisa no teu problema.

    update ditemcompl set natrec = '105' where exists (
    	select distinct di.idlaf,di.numitem,dic.natrec 
    	  from dlaf dl inner join ditem di on (di.idlaf = dl.idlaf)
    					left join ditemcompl dic on (dic.idlaf = di.idlaf and di.numitem = dic.numitem)
    					inner join tprd tp on (tp.idprd = di.idprd)
    					inner join dtrbitem dti on (dti.idlaf = di.idlaf and dti.numitem = di.numitem)	 
    	 where tp.descricao like '%arroz%' and dl.tipolf = 'S'
    	   and dl.dataemissao >= '2011/08/01' and dl.dataemissao <= '2011/08/31'
    	   and dti.sittributaria  in ('04','06') and dl.seriedoc in ('1','ECF')
    	   and dic.natrec is null  );
    


    Caso contrário, tenta repassar os create das tabelas e alguns inserts para teste.

    Vlew.

    • Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 2 de novembro de 2011 23:33
    • Marcado como Resposta Eder Costa quarta-feira, 9 de novembro de 2011 16:10
    terça-feira, 1 de novembro de 2011 19:18
  • Fala Marcus,

     

    Cara já consegui resolver. Na verdade, como estou usando um left join na consulta o resultado nunca ficará igual ao update, porque após o update o que estava de fora (left join) eu devo inserir na tabela e não atualizar.

     

    Mas te agradeço assim mesmo.

    • Marcado como Resposta Eder Costa quarta-feira, 9 de novembro de 2011 16:10
    terça-feira, 1 de novembro de 2011 20:16