Array
(
)

ajuda com update

Victor Pavia
   - 16 jan 2013

Pessoal,
Tenho esta query que me retorna 281 registros.
Abaixo faço um update de acordo com essa consulta.
Ao fazer o update só atualiza 238. Se alguém tiver alguma idéia... eu agradeço muito.
select tm.numeromov,tm.dataemissao,tm.IDMOV,ttm.NSEQITMMOV,tp.CODIGOREDUZIDO,tp.DESCRICAO,ttmf.NATREC,tpc.natrec as natrecprod,tpf.SITUACAOMERCADORIA,
tpf.SITTRIBUTARIACOFINS,tpf.SITTRIBUTARIAPIS,tm.CODTMV
from TMOV tm
inner join TITMMOV ttm on (tm.IDMOV = ttm.IDMOV)
inner join tprd tp on (tp.idprd = ttm.idprd)
left join TPRDFISCAL tpf on (tp.IDPRD = tpf.IDPRD)
left join TITMMOVFISCAL ttmf on (ttmf.IDMOV = ttm.IDMOV and ttmf.NSEQITMMOV = ttm.NSEQITMMOV)
left join TPRDCOMPL tpc on (tpc.IDPRD = tp.IDPRD)

where tm.codtmv like ('2.2%') and tm.codtmv not in('2.2.02','2.2.25')
and tpf.SITTRIBUTARIACOFINS in ('04','06','09')
and ((ttmf.natrec is null)or(ttmf.natrec = ''))
and tm.DATAEMISSAO >= '01/12/2012'
and tm.DATAEMISSAO <= '16/01/2013' and tpc.NATREC is not null
order by TM.NUMEROMOV

update ttmf set ttmf.NATREC = tpc.NATREC
from TMOV tm
inner join TITMMOV ttm on (tm.IDMOV = ttm.IDMOV)
inner join tprd tp on (tp.idprd = ttm.idprd)
left join TPRDFISCAL tpf on (tp.IDPRD = tpf.IDPRD)
left join TITMMOVFISCAL ttmf on (ttmf.IDMOV = ttm.IDMOV and ttmf.NSEQITMMOV = ttm.NSEQITMMOV)
left join TPRDCOMPL tpc on (tpc.IDPRD = tp.IDPRD)

where tm.codtmv like '2.2%' and tm.codtmv not in ('2.2.02','2.2.25')
and tpf.SITTRIBUTARIACOFINS in ('04','06','09')
and ((ttmf.natrec is null)or(ttmf.natrec = ''))
and tm.DATAEMISSAO >= '01/12/2012'
and tm.DATAEMISSAO <= '16/01/2013'

Alex Lekao
   - 16 jan 2013

Oi, boa tarde!!!

Cara eu não entendi seu script honestamente... mas dando uma olhada entre o select e o update a única coisa que vi que tinha em um e não tinha no outro era isto "and tpc.NATREC is not null" no update.

naso sei se sera isto.

eu normalmente não uso inner join, somente left join, naso sei se isto ajudaria montar diferente poderia influenciar.

espero que ajude.

Abraco.

Alex - Lekao

0
|
0

Bruno Leandro
   - 16 jan 2013

eu mudei a amarração no select de left join para inner na tabela TITMMOVFISCAL, veja quantos registros retornam, se retornar igual ao comando update provavelmente só existe essa quantidade de registros para esse filtro no movimento fiscal, e como ta com left caso nao exista ele tambem ira trazer um registro

select tm.numeromov,tm.dataemissao,tm.IDMOV,ttm.NSEQITMMOV,tp.CODIGOREDUZIDO,tp.DESCRICAO,ttmf.NATREC,tpc.natrec as natrecprod,tpf.SITUACAOMERCADORIA,
tpf.SITTRIBUTARIACOFINS,tpf.SITTRIBUTARIAPIS,tm.CODTMV
from TMOV tm
inner join TITMMOV ttm on (tm.IDMOV = ttm.IDMOV)
inner join tprd tp on (tp.idprd = ttm.idprd)
left join TPRDFISCAL tpf on (tp.IDPRD = tpf.IDPRD)
inner join TITMMOVFISCAL ttmf on (ttmf.IDMOV = ttm.IDMOV and ttmf.NSEQITMMOV = ttm.NSEQITMMOV)
left join TPRDCOMPL tpc on (tpc.IDPRD = tp.IDPRD)

where tm.codtmv like ('2.2%') and tm.codtmv not in('2.2.02','2.2.25')

and tpf.SITTRIBUTARIACOFINS in ('04','06','09')
and ((ttmf.natrec is null)or(ttmf.natrec = ''))
and tm.DATAEMISSAO >= '01/12/2012'
and tm.DATAEMISSAO <= '16/01/2013' and tpc.NATREC is not null
order by TM.NUMEROMOV

0
|
0

Victor Pavia
   - 17 jan 2013

Fala Bruno. É isso mesmo cara. Deu certinho. Eu não me toquei disso. Mas ta certinho.

Valeu mesmo...

0
|
0

José
   - 30 jul 2013

Victor obrigado por confirmar a solução, sendo assim estou dando o tópico por concluído,

0
|
0