SQL Select dentro de Update, erros..
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!
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
Curtidas 0
Melhor post
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
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
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
29/09/2014
Vou dar um UP aqui, pelo visto alguém passo o rodo nos posts do forum :s
rsrs
rsrs
GOSTEI 0
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
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
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
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)..
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!
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