Fórum Update e Select no mesmo comando #409337

11/11/2011

0

Preciso fazer um update no campo pre_del apenas nos listados na select, mas quando rodo atualiza todos os registros.
Alguém sabe como corrigir isso?

Update bnf_pre_banco set bnf_pre_banco.pre_del = B
WHERE PRE_DEL IN ( SELECT BANCO FROM
( SELECT b.pre_con||b.pre_est||b.pre_ben MATRICULA
,b.pre_nom NOME
,b.pre_ven VENCIMENTO
,b.pre_val VALOR
,b.pre_del BANCO
,SUM(B.PRE_VAL) OVER (ORDER BY B.PRE_BEN) ACUMULADO
FROM BNF_PRE_BANCO B
GROUP BY b.pre_con, b.pre_est,b.pre_ben,b.pre_nom,b.pre_ven,b.pre_val, b.pre_del
ORDER BY B.PRE_BEN)
WHERE ACUMULADO < 600)
Caroline Caca

Caroline Caca

Responder

Posts

16/11/2011

Marco Pinheiro

Se você rodar o comando abaixo, são mostrados somente os registros que você quer que altere?

select * from bnf_pre_banco
WHERE PRE_DEL IN ( SELECT BANCO FROM
( SELECT b.pre_con||b.pre_est||b.pre_ben MATRICULA
,b.pre_nom NOME
,b.pre_ven VENCIMENTO
,b.pre_val VALOR
,b.pre_del BANCO
,SUM(B.PRE_VAL) OVER (ORDER BY B.PRE_BEN) ACUMULADO
FROM BNF_PRE_BANCO B
GROUP BY b.pre_con, b.pre_est,b.pre_ben,b.pre_nom,b.pre_ven,b.pre_val, b.pre_del
ORDER BY B.PRE_BEN)
WHERE ACUMULADO < 600)
Responder

Gostei + 0

16/11/2011

Luan Soares

Cara, minha praia está sendo o firebird. Mas com o pouco conhecimento que tenho de Oracle(e sua semelhança com FB) vi que esse código está MUITO errado.

OBS: O que eu modifiquei no código, está entre { (chaves)

Update bnf_pre_banco set bnf_pre_banco.pre_del = {}B{}
WHERE {bnf_pre_banco.}PRE_DEL IN
( SELECT BANCO FROM

//{from o que!?}

{where {from o que!?}.{coluna o que!?} in}

//Aqui por se tratar de um subselect, você só pode buscar UMA coluna.

( SELECT {UMA COLUNA SÓ}
FROM BNF_PRE_BANCO B
GROUP BY {REVEJA A COLUNA QUE IRÁ AGRUPAR}
ORDER BY {UMA COLUNA POR FAVOR})


ACUMULADO < 600)

Seria bom também, para um melhor entendimento. Você postar os scripts de criação das tabelas, para recriarmos em nosso banco de dados e fazer os testes.
Responder

Gostei + 0

16/11/2011

Luan Soares

Cara, minha praia está sendo o firebird. Mas com o pouco conhecimento que tenho de Oracle(e sua semelhança com FB) vi que esse código está MUITO errado.

OBS: O que eu modifiquei no código, está entre { (chaves)

Update bnf_pre_banco set bnf_pre_banco.pre_del = B
WHERE {bnf_pre_banco.}PRE_DEL IN
( SELECT BANCO FROM

//{from o que!?}

{where {from o que!?}.{coluna o que!?} in}

//Aqui por se tratar de um subselect, você só pode buscar UMA coluna.

( SELECT {UMA COLUNA SÓ}
FROM BNF_PRE_BANCO B
GROUP BY {REVEJA A COLUNA QUE IRÁ AGRUPAR}
ORDER BY {UMA COLUNA POR FAVOR})


ACUMULADO < 600)

Seria bom também, para um melhor entendimento. Você postar os scripts de criação das tabelas, para recriarmos em nosso banco de dados e fazer os testes.

Ler Mais...

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar