update subselect subconsultas partir masivo hacer dentro con como anidado mysql select subquery

subselect - Actualización MYSQL con WHERE SELECT error de subconsulta



update mysql subselect (4)

Tengo un problema con la obtención de subconsultas seleccionadas para trabajar en una UPDATE . Estoy intentando algo como lo siguiente:

UPDATE foo SET bar=bar-1 WHERE baz= ( SELECT baz FROM foo WHERE fooID=''1'' )

Donde foo es el nombre de la tabla con la clave primaria fooID . bar y baz son del tipo INT. Al ejecutar esto, aparece el siguiente error:

Error: A query failed. You can''t specify target table ''foo'' for update in FROM clause


Debido al error 1093 Error 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000. El trabajo alrededor es crear una tabla temporal.

CREATE TEMPORARY table foo_bak (SELECT baz from foo WHERE fooID=''1''); UPDATE foo SET foo.bar=foo.bar-1 WHERE foo.baz = ( SELECT baz FROM foo_bak ); DROP TABLE foo_bak;


Desde aquí: artículo web "El motivo de este error es que MySQL no permite actualizaciones en una tabla cuando también está utilizando esa misma tabla en una selección interna como sus criterios de actualización". El artículo continúa para proporcionar una solución, que es usar una tabla temporal.

Usando este ejemplo, su actualización debería ser esta:

update foo set bar = bar - 1 where baz in ( select baz from ( select baz from foo where fooID = ''1'' ) as arbitraryTableName )


En algunos casos, también puede aprovechar la variable MySQL. p.ej:

SET @id1 = (SELECT id FROM foo WHERE name = ''parent''); UPDATE foo SET parent_id = @id1 WHERE name = ''emails'';