Fórum (Firebird) update em uma coluna de uma tabela x condição tabela y #595680
24/07/2018
0
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
Curtir tópico
+ 0
Responder
Posts
31/07/2018
Felipe Morais
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!
Responder
Gostei + 0
31/07/2018
Emerson Nascimento
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 tabelasLembrando 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.
);
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)