SQL Select dentro de Update, erros..

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

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

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

29/09/2014

Alexandre

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

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

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

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar