UPDATE COM JOINS

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Elenilson França
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 14 Fev 2017 9:02 pm

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')
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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')
   )
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes