Fórum SQL Select dentro de Update, erros.. #493892

29/09/2014

0

to quebrando a cabeça com um problema em SQL, meio dificil!
update promo set produto='produto1' where id= (select max(id) from promo where email='xxx@live.com')

quero dar um update na tabela promo no campo produto quero colocar produto1, onde id é a maior id tendo como referência aquele email ali!..
só que o SQL não permiti eu dar um update em algo que estou selecionando..

You can't specify target table 'promo' for update in FROM clause


tentei isto:
update promo set produto='produto1' where id= (SELECT id FROM (select max(id) from promo where email='xxx@live.com') as tmptbl)

ai vai sem erro, problema é que todos os registros são alterados..
alguém dá uma luz!
Alexandre

Alexandre

Responder

Post mais votado

29/09/2014


update a set produto='produto1' 
from promo as a
where a.id= (select max(b.id) from promo as b where b.email='xxx@live.com')

Fabiano Carvalho

Fabiano Carvalho
Responder

Gostei + 1

Mais Posts

29/09/2014

Ronaldo Lanhellas

Pode tentar assim também:

update promo a set produto='produto1' where a.id = (select max(b.id) from promo b where b.email='xxx@live.com')
Responder

Gostei + 1

29/09/2014

Alexandre

update promo a set produto='produto1' where a.id = (select max(b.id) from promo b where b.email='alexandrecaus@live.com')

referido por Ronaldo, deu seguinte erro:
#1093 - You can't specify target table 'a' for update in FROM clause




update a set produto='produto1' from promo as a where a.id= (select max(b.id) from promo as b where b.email='alexandrecaus@live.com')

referido ao Fabiano, deu seguinte erro:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from promo as a where a.id= (select max(b.id) from promo as b where b.email='ale' at line 1


obrigado pela colaboração!!
Responder

Gostei + 0

29/09/2014

Alexandre

Vou dar um UP aqui, pelo visto alguém passo o rodo nos posts do forum :s
rsrs
Responder

Gostei + 0

29/09/2014

Fabiano Carvalho

Tente isso.


update promo  set produto='produto1' where id= (select max(b.id) from promo as b where b.email='alexandrecaus@live.com')

Responder

Gostei + 1

29/09/2014

Ronaldo Lanhellas

Tente assim:

UPDATE promo AS p1, (SELECT max(id)  FROM promo WHERE email='alexandrecaus@live.com') AS p2
SET p1.produto = 'produto1' 
WHERE p1.id = p2.id;
Responder

Gostei + 1

30/09/2014

Alexandre

Bom dia,
perfeito, primeiramente quero agradecer aos companheiros que me ajudaram nessa!
agora, abaixo deixo o código que utilizei, peguei o que William comentou, e troquei o DECLARE por SET(pelo que li, DECLARE é usado apenas em funções/procedimentos)..

SET @ID = (SELECT MAX(id) FROM promo WHERE email='alexandrecaus@live.com');
UPDATE promo SET produto='produto_1'
WHERE id = @ID;

Vou marca-lo como melhor resposta devido a simplicidade do código, realmente foi efetivo para mim aprender desta forma.

Forte abraço aos camaradas!
Responder

Gostei + 0

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

Aceitar