Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 493893
            [titulo] => SQL Select dentro de Update, erros.. 
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-09-29 07:13:18
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 332951
            [status] => A
            [isExample] => 
            [NomeUsuario] => Fabiano Carvalho
            [Apelido] => FaabiianooC
            [Foto] => 332951_20140826143737.jpg
            [Conteudo] => [code]

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

[/code] ) )

SQL Select dentro de Update, erros..

Alexandre
   - 29 set 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!

Post mais votado

Faabiianooc
   - 29 set 2014

#Código


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

Ronaldo Lanhellas
   - 29 set 2014

Pode tentar assim também:

#Código

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

Alexandre
   - 29 set 2014

#Código

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:

Citação:
#1093 - You can't specify target table 'a' for update in FROM clause


#Código
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:

Citação:
#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!!

Alexandre
   - 29 set 2014

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

Faabiianooc
   - 29 set 2014

Tente isso.

#Código


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

William (devwilliam)
   - 29 set 2014

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

#Código

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

UPDATE promo SET produto='produto1'
WHERE id = @ID

Ronaldo Lanhellas
   - 29 set 2014

Tente assim:

#Código

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;

Alexandre
   - 30 set 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)..

#Código

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!