(Firebird) update em uma coluna de uma tabela x condição tabela y
Amigos, estou com um problema, preciso dar um update em uma tabela (produto), e tem como base desse update os dados de uma outra tabela (aliquota).
Fiz a seguinte Query, mas não sei por qual motivo ela não esta funcionando corretamente, simplesmente da update em todos os campos ignorando o where.
por exemplo lançou = '3' para todos os dados sobrescrevendo os update acima dele.
Fiz a seguinte Query, mas não sei por qual motivo ela não esta funcionando corretamente, simplesmente da update em todos os campos ignorando o where.
por exemplo lançou = '3' para todos os dados sobrescrevendo os update acima dele.
update produto set codregranfe1 = '1' WHERE EXISTS (SELECT claisento FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'T' ); COMMIT WORK; update produto set codregranfe1 = '3' WHERE EXISTS (SELECT claisento FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'I' ); COMMIT WORK; update produto set codregranfe1 = '2' WHERE EXISTS (SELECT claisento FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'S' ); COMMIT WORK; update produto set codregranfe1 = '5' WHERE EXISTS (SELECT claisento FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'N' ); COMMIT WORK;
David
Curtidas 0
Respostas
Felipe Morais
24/07/2018
Boa noite, David
Tente isto (verifique os apóstrofes, pois a ferramenta de edição do fórum adiciona apóstrofes extras):
Espero ter ajudado!
Tente isto (verifique os apóstrofes, pois a ferramenta de edição do fórum adiciona apóstrofes extras):
update produto set codregranfe1 = (SELECT '1' FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'T' ); COMMIT WORK; update produto set codregranfe1 = (SELECT '3' FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'I' ); COMMIT WORK; update produto set codregranfe1 = (SELECT '2' FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'S' ); COMMIT WORK; update produto set codregranfe1 = (SELECT '5' FROM ALIQUOTA WHERE ALIQUOTA.CLAISENTO = 'N' ); COMMIT WORK;
Espero ter ajudado!
GOSTEI 0
Emerson Nascimento
24/07/2018
para que isto funcione você precisa relacionar de alguma forma a tabela aliquota com a tabela produtos.
da forma como está o último update sempre irá sobrepor os anteriores.
deveria ser algo assim:
Lembrando que a instrução acima é somente para que você entenda como deve ser feito o relancionamento.
Se não há como relacionar a tabela aliquota com a tabela produto, não há como fazer a instrução funcionar como você precisa.
);
da forma como está o último update sempre irá sobrepor os anteriores.
deveria ser algo assim:
update produto set codregranfe1 = (select max(case CLAISENTO when 'T' then '1' when 'I' then '3' when 'S' then '2' else '5' end) from aliquota where aliquota.imposto = 'ICMS' and aliquota.cst = produto.cst_icms) -- note aqui é feito o relacionamento entre as tabelas
Lembrando que a instrução acima é somente para que você entenda como deve ser feito o relancionamento.
Se não há como relacionar a tabela aliquota com a tabela produto, não há como fazer a instrução funcionar como você precisa.
);
GOSTEI 0