Página 1 de 1

UPDATE COM JOINS

Enviado: Qua, 15 Fev 2017 2:38 pm
por Elenilson França
Prezados amigos, boa tarde! Preciso de uma ajuda, Uso o oracle aqui na empresa e precisamos fazer um update em uma coluna que tem filtro em outras tabelas, update com joins, eu fiz o select, mas o update com certeza o oracle não entende da forma que eu estou colocando abaixo, poderiam me ajudar? O cenário é, para o produto 00120 nos impostos PIS e COFINS foi imitido o código da situação tributária errado 01 na verdade deveria ser 06, ai antes de gerarmos o sped precisamos alterar conforme abaixo: Se puderem me falar a forma mais fácil de fazer isso, pois, meu conhecimento em sql é mínimo. Desde já fico agradecido aos amigos.

Selecionar tudo

-- select ok
select a.cod_situacao_tributaria, a. * from pir_itemsai_impostos a
inner join pir_itens_saidas b on a.cod_nf = b.cod_nf --Dessa tabela eu filtro o código do produto
inner join pir_saidas c on b.cod_nf = c.cod_nf --Dessa tabela seleciono a data de emissão
where b.cod_produto = '00120'
and c.dat_emissao between  '01/01/2017'and'31/01/2017'
and a.cod_filial = '011'
and b.cod_empresa = '011'
and a.cod_imposto in ('PIS','CONFINS')


--update
update pir_itemsai_impostos a --Dessa tabela quero alterar a coluna CST
inner join pir_itens_saidas b on a.cod_nf = b.cod_nf --Dessa tabela eu filtro o código do produto
inner join pir_saidas c on b.cod_nf = c.cod_nf --Dessa tabela seleciono a data de emissão
set a.cod_situacao_tributaria = '06'
where b.cod_produto = '00120'
and c.dat_emissao between  '01/01/2017'and'31/01/2017'
and a.cod_filial = '011'
and b.cod_empresa = '011'
and a.cod_imposto in ('PIS','CONFINS')

Re: UPDATE COM JOINS

Enviado: Qua, 15 Fev 2017 4:39 pm
por dr_gori
O ideal seria você utilizar a PK da tabela pir_itemsai_impostos para fazer o update.
Algo mais ou menos assim:
(digamos que a PK dessa tabela seja o campo ID_ITEM_IMPOSTO)

Selecionar tudo

UPDATE pir_itemsai_impostos Y
SET Y.cod_situacao_tributaria = '06'
WHERE Y.ID_ITEM_IMPOSTO 
  IN (  
    select a.ID_ITEM_IMPOSTO
    from pir_itemsai_impostos a
    inner join pir_itens_saidas b on a.cod_nf = b.cod_nf --Dessa tabela eu filtro o código do produto
    inner join pir_saidas c on b.cod_nf = c.cod_nf --Dessa tabela seleciono a data de emissão
    where b.cod_produto = '00120'
    and c.dat_emissao between  '01/01/2017'and'31/01/2017'
    and a.cod_filial = '011'
    and b.cod_empresa = '011'
    and a.cod_imposto in ('PIS','CONFINS')
   )
Como eu não sei quais são os campos da sua PK, eu não sei dizer precisamente como deve ficar o UPDATE.
Caso seja 2 campos ou mais, dá pra fazer assim:

Selecionar tudo

UPDATE pir_itemsai_impostos Y
SET Y.cod_situacao_tributaria = '06'
WHERE (Y.CAMPOPK1, Y.CAMPOPK2) 
  IN (  
    select a.CAMPOPK1, a.CAMPOPK2
    from pir_itemsai_impostos a
    inner join pir_itens_saidas b on a.cod_nf = b.cod_nf --Dessa tabela eu filtro o código do produto
    inner join pir_saidas c on b.cod_nf = c.cod_nf --Dessa tabela seleciono a data de emissão
    where b.cod_produto = '00120'
    and c.dat_emissao between  '01/01/2017'and'31/01/2017'
    and a.cod_filial = '011'
    and b.cod_empresa = '011'
    and a.cod_imposto in ('PIS','CONFINS')
   )