SQL Select dentro de Update, erros..

SQL Server

29/09/2014

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

Curtidas 0

Melhor post

Fabiano Carvalho

Fabiano Carvalho

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')

GOSTEI 1

Mais Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

29/09/2014

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')
GOSTEI 1
Alexandre

Alexandre

29/09/2014

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!!
GOSTEI 0
Alexandre

Alexandre

29/09/2014

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

Fabiano Carvalho

29/09/2014

Tente isso.


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

GOSTEI 1
William

William

29/09/2014

Não sei se você vai precisar de recursividade, mas pode ser adaptado!

DECLARE @ID INT
SELECT @ID = MAX(id) FROM promo WHERE email='xxx@live.com'

UPDATE promo SET produto='produto1'
WHERE id = @ID
GOSTEI 1
Ronaldo Lanhellas

Ronaldo Lanhellas

29/09/2014

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;
GOSTEI 1
Alexandre

Alexandre

29/09/2014

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!
GOSTEI 0
POSTAR