UPDATE COM JOINS

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qua, 15 Fev 2017 2:38 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.

Código: Selecionar todos
-- 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')
Elenilson França

Mensagemem Qua, 15 Fev 2017 4:39 pm

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)

Código: Selecionar todos
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:
Código: Selecionar todos
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')
   )
dr_gori
Localização: Seattle, WA, USA

Thomas F. G



Voltar para SQL

Quem está online

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