UPDATE COM SELECT DENTRO

SACOFRITO 23/08/2011 11:36:33
#382306
Bom dia galera..
Estou tentando atualizar o valor de desconto de registros de uma tabela.
E pra isso eu queria atualizar o maior valor pago onde o codigo da venda for igual a X.

fiz assim
      con.Execute [Ô]update movimento set desconto = [Ô] & Replace(varDescontoTotal, [Ô],[Ô], [Ô].[Ô]) & [Ô] where codorc  = [Ô] & varNumeroVenda & [Ô] and valorpago =  (select max(valorpago) from movimento where codorc =[Ô] & varNumeroVenda & [Ô])[Ô]


Mas deu erro....
You cant specify table [ô]movimento[ô] for update in from clause;
ASHKATCHUP 23/08/2011 11:38:36
#382307
Resposta escolhida
Quando tu usa duas vezes a mesma tabela numa instrução, você deve atribuir ALIAS a elas.


Update Movimento A
Set A.Nome = [ô]FODAO[ô]
Where A.Codigo = (Select Max(Codigo) From Movimento B Where B.Tipo = [Ô]Ash Katchup[Ô])
SACOFRITO 23/08/2011 11:42:50
#382309
Nao deu certo amigo..Continou o mesmo erro..trocou de movimento para [ô]A[ô].

      con.Execute [Ô]update movimento A set A.desconto = [Ô] & Replace(varDescontoTotal, [Ô],[Ô], [Ô].[Ô]) & [Ô] where A.codorc  = [Ô] & varNumeroVenda & [Ô] and A.valorpago =  (select max(B.valorpago) from movimento B where B.codorc =[Ô] & varNumeroVenda & [Ô])[Ô]




Porém gostei da sua humildade kkkkk
ASHKATCHUP 23/08/2011 11:47:00
#382310
Qual banco de dados?
SACOFRITO 23/08/2011 11:47:52
#382311
MySQL.
ASHKATCHUP 23/08/2011 11:55:42
#382313
Deficiência do MYSQl... FAIL... Isso funciona em SQLServer e Oracle..

Citação:


Answer No: 156
Actually, your above update query seems illegal as per SQL standard. MySQL does not allow to UPDATE or DELETE a table[ô]s data if you[ô]re simultaneously reading that same data with a subquery. Because you are doing so that is why MySQL tersely said its such error message. Therefore, you will have to rewrite your above update query.

SACOFRITO 23/08/2011 11:57:28
#382314
Omg.. vou fazer por recordset mesmo..
Obrigado FODAO.
ASHKATCHUP 23/08/2011 11:58:55
#382315
Pelo o que os manolos do MYSql falaram, TALVEZ isso funcione


update movimento
set desconto = 10
where codorc = 1
and valorpago = (select max(valorpago) from (Select * From Movimento) where codorc = 1)
SACOFRITO 23/08/2011 14:13:15
#382325
Optei pelo recordset mesmo.
Desta forma acho que iria ficar muito lento. vlw pela ajuda ASH
MARCELO.TREZE 23/08/2011 14:13:57
#382326
eu não sei mas acho que como é na mesma tabela um simples max resolveria algo do tipo

con.Execute [Ô]update movimento set desconto = [ô][Ô] & Replace(varDescontoTotal, [Ô],[Ô], [Ô].[Ô]) & [Ô][ô] where codorc  = [ô][Ô] & varNumeroVenda & [Ô][ô] and valorpago =   max(valorpago)[Ô]


Tópico encerrado , respostas não são mais permitidas